每个等待等待的ECMAScript运行时是否等待? [重复]

问题描述 投票:4回答:1

以下目前在节点,chrome,firefox中记录Yahtzee

正如你所看到的,甚至没有设定Promise的原型。

const fake = new Number(1)
fake.then = fn => setTimeout(fn, 0, 'Yahtzee')
const main = async () => {
  console.log(await fake)
}
main()

这是否普遍适用?更重要的是,这种行为可能会持续存在吗?

javascript async-await es6-promise
1个回答
2
投票

是的,这会奏效。 According to the specs,一个新的Promise将被召唤并以此价值解决。 Promise.resolve与thenable合作,所以它对await也一样

所以,上面相当于

const fake = new Number(1)
fake.then = fn => setTimeout(fn, 0, 'Yahtzee')
const main = async () => {
  console.log(await Promise.resolve(fake))
}
main()

它是the .resolve() method that calls then的对象。

© www.soinside.com 2019 - 2024. All rights reserved.