【发布时间】:2019-03-29 05:42:57
【问题描述】:
我需要知道由函数调用发起的所有工作何时完成。
我有一个函数,它将另一个函数作为参数并调用该函数:
function outer(inner) {
inner()
}
内部函数可能会启动一些异步行为:
function inner() {
new Promise(...)
new Promise(...)
new Promise(...)
requestAnimationFrame(...)
requestAnimationFrame(...)
}
我知道Promise.all 的工作原理。但是对于 Promise.all,你需要传递一系列的 Promise。我希望我的函数不知道内部函数内部发生的细节。由于 javascript 使用回调而不是 Promise 处理大量异步行为,因此 Promise.all 无法处理所有异步工作情况。
从外层函数的范围来看,有没有办法检测内层函数的异步和同步工作是否完成,以及这个行为是否适用于我传入outer的任何函数?
function outer(inner) {
inner.allWorkComplete(() => ...do more work)
inner();
}
我试图避免将其硬编码到内部函数中,因为这违背了构建更高阶函数来处理 allWorkComplete 事件的意义。
这只是 javascript 中的反模式吗?
【问题讨论】:
-
没有。 Promise.all 完全不同。
-
Promise.all与Promise.all究竟有何不同? -
@JeremyGottfried 你的问题是描述 Promise.all,使用它有什么问题?
-
这个想法是,我想知道函数的工作何时完成,而不是简单地传递一组承诺。范围不同。例如,requestAnimationFrame 在技术上不是一个承诺,但它是异步的。
标签: javascript asynchronous promise