Чтение файла происходит перед записью файла в node.js - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть приложение fs.writeFileSyn c и fs.readFile для работы моего приложения. Я обещал обе эти операции. Я обрабатываю другие заявления только после того, как эти обещания будут выполнены. Я наблюдал, что чтение происходит до того, как запись завершена будет читать файл. Если содержимое файла совпадает с последним сгенерированным случайным числом. Затем чтение и запись синхронизируются.

файл. 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;
    }

1 Ответ

1 голос
/ 21 февраля 2020

Я полагаю, что вы неправильно используете объекты Promise.

 await writeFile(path)

не завершится, пока вы не вызовете метод resolve() в своей функции Promise.

Может быть, вам следует изменить функцию writeFile(), чтобы она выглядела следующим образом, и сделать аналогичное изменение на readFile().

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

Но, надо сказать, син c функции в fs избавляют от необходимости обещаний. Так что вы можете сделать это так же легко.

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

Или вы можете обернуть функции asyn c в обещания, например:

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

Это называется обещание функция.

...