resolve & Promise.resolve
这是2个不一样的函数。
resolve
:会调用reoslvePromise
。- 传入
result
。- 微任务 v8处理函数 -> 微任务result.then。(此时通过result来确认promise的状态)
- 会有2个微任务的等待时间。
- 传入
Promise.resolve
:若传入promise
直接返回传入的promise
。
async
return 时,会调用 resolve
。
如果return
的是 promise
,会有2个微任务时间(比直接使用promise
多一个)
let p1 = Promise.resolve(1)
let async1 = async () => p1
// 相当于 下面这个
let myAsync = () => new Promise(resolve => resolve(p1))
await
await
等于调用 Promise.resolve
。
V8
源码会直接调用 Promise.resolve
。(chrome72版后)
如果 await
的是 promise
,会有1个微任务时间。
async function fn () {
// 使用 await
const res = await value
console.log(1)
// 等价于 Promise.resolve
Promise.resolve(value)
.then(()=> console.log(1))
}