javascript - 是否每个带有 await 的 ECMAScript 运行时都等待任何 Thenable?

标签 javascript async-await es6-promise

<分区>

以下当前在 node、chrome、firefox 中记录 Yahtzee

如你所见,甚至连 Promise 的原型(prototype)都没有设置。

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

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

最佳答案

是的,这会起作用。 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在对象上。

关于javascript - 是否每个带有 await 的 ECMAScript 运行时都等待任何 Thenable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49086056/

相关文章:

javascript - slider 在点击时滑出,但我不想要这个

javascript - 如何对作为对象属性的 javascript 函数生成器进行操作

javascript - CSS + HTML 自定义形状按钮

asp.net-core - 如果不满足条件,则从公共(public)异步任务 OnGetAsync() 重定向到不同的 Razor 页面

javascript - 无法使用 async 和 Foreach 处理 Firebase 获取的值

javascript - 在循环的每次迭代中等待 async .done()

javascript - jQuery 灯箱,启动问题

c# - await WebClient.DownloadStringTaskAsync 永远等待,但访问 Result 属性有效

javascript - Node.JS 异步调用mySql

javascript - 递归 Promise.all?