【发布时间】:2021-11-16 04:16:42
【问题描述】:
我在 Node.js 中有一个 JS 异步函数。比如说,它从一个 URL 下载一个文件并用它做一些事情,例如。解压它。我是这样写的,它可以工作,但是eslint 向我展示了一股浓浓的代码味道:error Promise executor functions should not be async no-async-promise-executor。 Async 是必需的,因为 await fetch 在 body 函数中。
我对@987654326@ 和async/await 不够熟练,无法自行纠正。我想摆脱 Promise 并充分使用 async/await。模块stream/promises 似乎是从Node-15 开始的方式,正如这里how-to-use-es8-async-await-with-streams 所评论的那样。在这种情况下如何使用await pipeline(...)?也许有更好更短的方法?
函数如下:
function doSomething(url) {
return new Promise(async (resolve, reject) => {
try {
const fileWriteStream = fs.createWriteStream(someFile, {
autoClose: true,
flags: 'w',
});
const res = await fetch(url);
const body = res.body;
body
.pipe(fileWriteStream)
.on('error', (err) => {
reject(err);
})
.on('finish', async () => {
await doWhatever();
resolve('DONE');
});
} catch (err) {
reject(err);
}
});
}
【问题讨论】:
-
不确定这是否是您的问题,但
async function doSomething对您没有任何作用......它应该只是function doSomething,因为您返回Promise -
嗯,是的,我从一些较大的代码中提取了该函数,但这确实是题外话。我正在从我的示例中删除它。
标签: javascript node.js async-await es6-promise