在promise函数内部等待

问题描述 投票:0回答:1

如何在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之前添加(解析,拒绝),我仍然会收到语法错误...

javascript async-await stream
1个回答
0
投票

你不!而且,您也不会将异步函数作为回调传递给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);  // 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也没有多大意义。

© www.soinside.com 2019 - 2024. All rights reserved.