在返回诺言时需要异步



我知道我们要在函数内使用 await时使用 async,但是如果函数返回承诺(不等待它(,我们是否应该以async的名称前缀?p>示例1:

async function fetching() {
 return fetch('someUrl')
}

示例2:

function fetching() {
  return fetch('someUrl');
}

什么是正确的,示例1或示例2?

asyncawait只是与承诺一起使用的便利方法。

async function foo(){
    return true;
}

完全相同
function bar(){
    return new Promise(resolve => {
        resolve(true);
    });
}

因为async将返回值封装在方法完成时已解决的承诺中。

以类似的方式

async function oof(){
    let myVal = await foo();
    do_something_else();
}

(注意:async仅在此处使用await(

相同
function rab(){
    let myVal;
    bar().then(val => myVal = val);
}

await只是使链接更容易

async功能的结果自动包裹在Promise.resolve中,这意味着,如果您返回承诺,它将自动解开。本质上,这并不重要。

const delay = x => new Promise(res => setTimeout(() => {
  console.log("Resolved");
  res();
}, x));
function fetch()
{
  return delay(1000);
}
async function fetchA()
{
  return delay(1000);
}
(async () =>
{
  console.log("Create fetch");
  const f1 = fetch();
  console.log("Await fetch");
  await f1;
  console.log("Awaited fetch");
  
  console.log("Create fetchA");
  const f2 = fetchA();
  console.log("Await fetchA");
  await f2;
  console.log("Awaited fetchA");
})();

最新更新