【发布时间】:2020-05-05 02:52:52
【问题描述】:
我正在开发一些 Nodejs 脚本,我有一个关于 JS 本身使用 async 关键字的问题。
例如,假设我有一个返回如下承诺的函数:
function myFunction () {
... some job
return new Promise(async (resolve, reject) => {
const innerResult = await someHeavyJob();
... some job
resolve(innerResultThatIsManipulated);
});
}
我可以用另一种方式来写它:
async function myFunction () {
... some job
const innerResult = await someHeavyJob();
... some job
return innerResultThatIsManipulated;
}
但我有一个问题,如果我选择第一个解决方案,那么我是否可以使用 async 关键字,是否推荐?例如,像这样:
async function myFunction () {
... some job
return new Promise(async (resolve, reject) => {
const innerResult = await someHeavyJob();
... some job
resolve(innerResultThatIsManipulated);
});
}
强调这是一个异步方法,并且在其代码的所有路径中都返回承诺(不是简单的对象)。
那么,推荐的使用方法是什么?
【问题讨论】:
-
在你的第一个函数中你试图返回另一个承诺的承诺,有不必要的冗余
-
异步是一种 Promise(语法糖)。所以你可以使用你个人喜欢的东西。
-
第一种方式被认为是一种反模式,因为你将一个 promise 返回函数包装在一个 promise 构造函数中。 Promise 构造函数用于将非 Promise 返回的异步函数转换为 Promise
标签: javascript promise async-await