【发布时间】:2018-02-22 01:21:56
【问题描述】:
我读到: Design pattern for managing multiple asynchronous JavaScript operations 但这没有明确的解决方案,而且这个问题非常古老并且依赖于 jQuery。
我的情况有点类似,无法通过 promise.all 解决,因为异步任务被用户尽可能频繁地调用。
我要做的是查看所有异步操作何时空闲。 asyncTest 什么时候真正什么都不做。
这一定是一个常见的检查,只是想知道它是如何完成的。
用户可以随时调用 asyncTest。
class TestApp {
processing = false;
asyncTest() {
this.processing = true;
setTimeout(() => {
this.processing = false;
}, 500);
}
}
如您所见,这会产生冲突。
其他异步任务可能想看看这是否是处理。 我考虑了以下内容,但感觉太糟糕了
编辑:嗯,基于下面 Simon K 的 cmets 以及它干净且有效的事实,直到我从社区听到其他消息,我下面的原始解决方案似乎很好:
class TestApp {
_processCount = 0;
get isProcessing() {
return this._processCount > 0;
}
asyncTest() {
this._processCount++;
setTimeout(() => {
this._processCount--;
}, 500);
}
}
注意:Angular 5 项目。对 Rx/js 有点熟悉,但不是很专业,我最近意识到它的强大,并怀疑它在这里会有所帮助。
非常感谢!
【问题讨论】:
-
在这里使用简单的解决方案绝对没有错(这真的不是 hacky)。它绝对是最易读的,任何使用 Rx/js 的解决方案最终都会保留一些正在运行的进程列表,这比保持简单的计数更糟糕。
标签: javascript angular typescript