等待内承诺功能



如何在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 一样,但即使我在之前添加"异步"(解析、拒绝(,我仍然会收到语法错误......

你没有!而且您也不会将异步函数作为回调传递给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;
}

在收到finish事件后调用stream.end()也没有多大意义。

我不知道您要实现的功能,但是如果您想要正确的语法,则如下所示:

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()
})
}

更正语法的步骤

  1. 在倒数第二个右大括号之后放置一个右括号。
  2. 在第
  3. 2 行之前添加异步(解析、拒绝(。