shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.88k stars 504 forks source link

【Q702】return promise 与 return await promise 有何区别 #724

Open shfshanyue opened 2 years ago

shfshanyue commented 2 years ago

async function p1 () {
  return 3
}

async function p2 () {
  return Promise.resolve(3)
}

async function p3 () {
  return await Promise.resolve(3)
}
liweinanone commented 2 years ago

return promise:

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

return await promise:

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

希望可以得到山月的反馈

shfshanyue commented 2 years ago
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 最终返回得到的结果是相同的,但是有些顺序的变化,可看此例

PstereoJW commented 1 year ago

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

xylon001 commented 10 months ago

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

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