高级前端
js
【Q702】return promise 与 return await promise 有何区别

return promise 与 return await promise 有何区别

更多描述 如

async function p1() {
  return 3;
}
 
async function p2() {
  return Promise.resolve(3);
}
 
async function p3() {
  return await Promise.resolve(3);
}

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 724 (opens in a new tab)

Author 回答者: liweinanone (opens in a new tab)

return promise:

返回结果为 Promise {fulfilled或者 rejected}

return await promise:

返回结果为 Promise {pending}, 因为 async 函数总是返回一个 promise (resolved promise?

希望可以得到山月的反馈

Author 回答者: shfshanyue (opens in a new tab)

async function p1() {
  return 3;
}
 
async function p2() {
  return Promise.resolve(3);
}
 
async function p3() {
  return await Promise.resolve(3);
}
 
// Output: p1、p3、p2
p3().then((o) => console.log(o, "p3"));
p2().then((o) => console.log(o, "p2"));
p1().then((o) => console.log(o, "p1"));

@liweinanone 最终返回得到的结果是相同的,但是有些顺序的变化,可看此例

Author 回答者: PstereoJW (opens in a new tab)

主要在await会等待Promise的完结状态,如果Promise为reject,会在当前trycatch中被捕获,否则会将reject传递到外层。 https://stackoverflow.com/questions/38708550/difference-between-return-await-promise-and-return-promise (opens in a new tab)

Author 回答者: xylon001 (opens in a new tab)

上述例子为什么先调用p2 结果还是没有改变?

p2().then(o => console.log(o, 'p2'))
p3().then(o => console.log(o, 'p3'))
p1().then(o => console.log(o, 'p1'))