返回承诺时是否需要异步?

时间:2018-03-26 10:50:05

标签: javascript promise

我理解当我们想在函数中使用async时我们使用await,但如果函数返回一个promise(没有等待它),我们应该在名称前添加异步吗?

示例1:

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

示例2:

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

更合适的是,示例1还是示例2?

2 个答案:

答案 0 :(得分:0)

asyncawait只是处理承诺的便捷方法。

async function foo(){
    return true;
}

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

因为async将返回值封装在一个promise中,当方法完成时,它会被解析。

以类似的方式

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

(注意:async只能在这里使用才能使用await

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

await只是让链接更容易

答案 1 :(得分:0)

async函数的结果会自动包含在Promise.resolve中,这意味着如果您返回Promise,它将自动解包。从本质上讲,这无关紧要。



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");
})();