【发布时间】:2020-01-12 15:53:46
【问题描述】:
尝试提出 API,混合承诺功能,例如:
class Awaitable {
constructor () {
this.promise = Promise.resolve()
}
then (fn) {
// awaited result must be _this_ instance
return this.promise.then(() => fn(this))
}
}
let smth = await (new Awaitable())
console.log(smth)
此代码创建递归。
重点是让smth 成为新创建的thenable 实例。
将 then 与 null 存根会使等待的结果不完整。
我想知道这是否可能,似乎存在一些概念上的障碍,我无法绕过。
【问题讨论】:
-
不,你不能自己解决一个承诺。
-
它似乎不仅与它本身一样,而且与任何 thenable 一样。有什么解决办法吗?
-
你真正的主要观点是什么?你想在这里做什么?为什么需要
Awaitable课程?你不想想要创建递归,对吧? -
想象 jQuery 在所有效果完成后可以等待并返回集合
let $target = await $(target).fadeIn(100) -
jQuery 包装器实际上是 可等待的,它只需要调用一个额外的方法:
.promise()。但由此产生的承诺通过undefinedafaik 实现,而不是 jQuery 包装器本身。
标签: javascript promise async-await es6-promise ecmascript-2017