如何在没有承诺的情况下读取异步函数中的文件?



我正在尝试在异步函数中读取/写入文件(示例(:

async readWrite() {
// Create a variable representing the path to a .txt
const file = 'file.txt';
// Write "test" to the file
fs.writeFileAsync(file, 'test');
// Log the contents to console
console.log(fs.readFileAsync(file));
}

但是每当我运行它时,我总是收到错误:

(node:13480) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'map' of null

我尝试使用蓝鸟,方法是在我的项目目录中使用npm install bluebird安装它并添加:

const Bluebird = require('bluebird');
const fs = Bluebird.promisifyAll(require('fs'));

到我的index.js(主(文件,并添加:

const fs = require('fs');

到我不想使用 fs 的每个文件。

我仍然收到同样的错误,只能通过注释掉东西将问题缩小到 fs。

任何帮助将不胜感激。

首先:asyncfunctions 返回一个承诺。因此,根据定义,您已经在使用承诺。

第二,没有fs.writeFileAsync。您正在寻找fs.writeFilehttps://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

有了承诺,利用异步函数的力量

const fs = require('fs');
const util = require('util');
// Promisify the fs.writeFile and fs.readFile
const write = util.promisify(fs.writeFile);
const read = util.promisify(fs.readFile);
async readWrite() {
// Create a variable representing the path to a .txt
const file = 'file.txt';
// Write "test" to the file
await write(file, 'test');
// Log the contents to console
const contents = await read(file, 'utf8');
console.log(contents);
}

在上面:我们使用util.promisify将nodejs回调样式使用函数转换为promises。在异步函数中,您可以使用 await 关键字将承诺的解析内容存储到 const/let/var。

延伸阅读材料: https://ponyfoo.com/articles/understanding-javascript-async-await

没有承诺,回调样式

const fs = require('fs');
async readWrite() {
// Create a variable representing the path to a .txt
const file = 'file.txt';
// Write "test" to the file
fs.writeFile(file, 'test', err => {
if (!err) fs.readFile(file, 'utf8', (err, contents)=> {
console.log(contents);
})
});
}

最新更新