从异步函数返回

时间:2019-06-18 21:57:18

标签: javascript promise

我想知道是否必须从异步函数中返回,例如:

async function foo() {
  return bar(); // bar returns a promise
}

或者我可以做

async function foo() {
  bar();
}

因为异步将自动返回一个承诺,但是我应该返回原始的承诺而不是由异步自动创建的新承诺吗?

2 个答案:

答案 0 :(得分:0)

保证异步函数返回Promise,但是Promise何时结算以及它传递的内容取决于该函数返回的内容。

答案 1 :(得分:0)

这取决于您是否希望将值传递给链中的下一个Promise。通常最好将值返回给promise,除非它是链中的最后一个函数,或者没有信息要传递(出于某种原因)。

如果调用bar()的唯一原因是因为它在函数外部引起了一些副作用(更改全局变量,更新DB等),我想您无法返回。但是即使那样,我仍然会为成功返回一些价值,特别是如果bar()执行I / O。

function bar(){
  return 'hello world';
}

async function foo1() {
  bar(); // Returns a promise with an empty value
}

async function foo2() {
  return bar(); // returns a promise with the _value_ returned from bar()
}

foo1().then(console.log); // undefined
foo2().then(console.log); // 'Hello World'