我有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;
}
我相信您正在滥用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函数。