等待内诺功能

时间:2019-10-12 17:51:46

标签: javascript async-await stream

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

2 个答案:

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

纠正语法的步骤

  1. 在倒数第二个大括号之后放置一个右括号。
  2. 在第2行上(解析,拒绝)之前添加异步
相关问题