从异步或正常功能返回承诺之间有区别

时间:2019-02-14 06:56:54

标签: javascript asynchronous async-await

一段时间以来,我一直想知道简单返回承诺时的async关键字是否多余?

请考虑以下内容:

async function thePromise() {
    const v = await Inner();
    return v+1;
}

async function wrapper() {
    return thePromise();
}

我一直想知道wrapper函数,因为它不等待承诺的解决,所以async关键字会不会是多余的?而且我们不应该只使用:

function wrapper() {
    return thePromise();
}

一个明显的缺点是,这种格式会使我们混淆使用诺言,但除此之外:从异步函数或普通函数返回诺言是否有实际区别?

2 个答案:

答案 0 :(得分:0)

考虑这个简单的演示:-

autoApply

答案 1 :(得分:0)

因为在javascript中没有诸如Promise of Promise之类的东西,所以它们是等效的

// code 1
promise1.then(() => {
  //...
  return promise2;
}).then(f);

// is equivalent to code 2

promise1.then(() => {
  //...
  return promise2.then(f);
});

异步函数也会发生同样的事情,从异步函数返回一个承诺等于返回等待的表达式

// code 3
async () => {
  // ...
  return p;
}

// is equivalent to code 4
async () => {
  // ...
  return await p;
}

要注意的一件事是,它不适用于promise之类的数组。对于这些情况,您可以用Promise.all包装该数组,以将promise数组变成一个promise数组,或者为其他数据结构编写自己的代码。

相关问题