在node.js中写入文件之前发生文件读取

问题描述 投票:1回答:1

我有fs.writeFileSync和fs.readFile操作使我的应用程序正常工作。我已经保证了这两种操作。这些承诺得到解决后,我才会处理其他声明。我观察到的是在写入完成之前正在读取]

这是我的代码段

为了说明上述问题,我创建了一个代码段,该代码段将随机数写入文件,稍后它将读取文件。文件内容是否与最新生成的随机数相同。然后读写同步。

file.js

   let fs = require('fs');
   let fileContent;
   let randomNumbers = Math.ceil(Math.random() * 10);
   function test (filepath) {

      (async () => {

         await writefile(filepath);
         param = await readfile(filepath);
         console.log(param);
      }) ();
    }

    function writefile(filepath) {
       let promise;
       promise = new Promise((resolve,reject) => {

          fs.appendFileSync(randomNumbers,filepath);
       })  
       return promise;
    }

    function readfile(filepath) {
       let promise;
       promise = new Promise((resolve,reject) => {
          fileContent = fs.readFileSync(filepath);
          if(  fileContent == randomNumbers ) {
            console.log("file read and write is synchronized");
          } else {
             console.log("file read and write is not synchronized");
          }
       })  
       return promise;
    }

javascript node.js async-await es6-promise fs
1个回答
1
投票

我相信您正在滥用Promise对象。

 await writeFile(path)

除非您在Promise函数中调用resolve()方法,否则不会完成。

也许您应该更改writeFile()功能使其看起来像这样,并对readFile()进行类似的更改。

function writefile(filepath) {
   return new Promise((resolve,reject) => {
      fs.appendFileSync(randomNumbers,filepath);
      resolve()
   }) 
} 

但是,必须说,fs中的同步功能摆脱了对Promise的需求。这样您就可以轻松完成此操作。

function test (filepath) {
      fs.appendFileSync(randomNumbers,filepath);
      fileContent = fs.readFileSync(filepath);
      console.log(fileContent);
 }

或者您可以将异步函数包装在promise中,如下所示:

function writefile(filepath) {
   return new Promise((resolve,reject) => {
      fs.appendFile(randomNumbers,filepath, (err, result) => {
        if (err) reject(err);
        else resolve(result);
      });
   })  
}

称为promisifying函数。

© www.soinside.com 2019 - 2024. All rights reserved.