如何在return new Promise((resolve, reject) => { ... }
内部使用await?
这是我的代码:
async function write_file(file1, file2){
return new Promise((resolve, reject) => {
const stream = fs_extra.createWriteStream(file2);
stream.write(await fs_extra.readFile(file1), async () => await fs_extra.unlink(file1));
stream.on('finish', () => resolve());
stream.on('error', error => reject(error));
stream.end();
}
}
我会像在非异步函数中使用await一样遇到语法错误,但是即使我在`async之前添加(解析,拒绝),我仍然会出现语法错误...
答案 0 :(得分:1)
您没有!而且,您也不会将异步函数作为回调传递给write
。到那时为止,您已经阅读了该文件,因此可以立即删除它,也可以与其他文件并行删除。
async function write_file(file1, file2) {
const stream = fs_extra.createWriteStream(file2);
stream.end(await fs_extra.readFile(file1));
const unlinkP = fs_extra.unlink(file1);
unlinkP.catch(() => {});
// or just await fs_extra.unlink(file1);
await new Promise((resolve, reject) => {
stream.on('finish', resolve);
stream.on('error', reject);
});
await unlinkP;
}
在收到stream.end()
事件后调用finish
也没有任何意义。
答案 1 :(得分:0)
我不知道您要实现的功能,但是如果您想要正确的语法,则如下所示:
async function write_file(file1, file2) {
return new Promise(async (resolve, reject) => {
const stream = fs_extra.createWriteStream(file2)
stream.write(await fs_extra.readFile(file1), async () => await fs_extra.unlink(file1))
stream.on("finish", () => resolve())
stream.on("error", error => reject(error))
stream.end()
})
}
纠正语法的步骤