每个带有await 的ECMAScript 运行时都会等待任何Thenable 吗?

Mih*_*dis 5 javascript async-await es6-promise

目前登录node、chrome、firefox的如下Yahtzee

正如你所看到的,连 Promise 的原型都还没有确定。

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

这是否普遍有效?更重要的是,这种行为可能会持续下去吗?

Axn*_*yff 3

是的,这会起作用。根据规范,将调用一个新的 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()
Run Code Online (Sandbox Code Playgroud)

其中它是调用对象的方法。.resolve()then