JS
控件调用数据服务并继续呈现自身,而不等待结果。有时,服务在控件完全呈现后返回,有时则在控件完全呈现之前返回。如何在 JS
中实现 WaitForAll
?我正在使用 jQuery
。
这是我自己所做的:(Utils.WaitForAll 简单地计算与它调用句柄的计数匹配后的命中数)
// before we started
var waiter = Utils.WaitFor({handle: function(e){ alert("got called"; }, count: 2});
触发方式:
// place one
waiter.Notify({one: {...}});
然后
// place two (can occur before one though)
waiter.Notify({two: {...}});
触发句柄,句柄在其 e
中具有标记为 one
和 two
的值。 Waiter 是一个额外的“全局”变量,在堆栈中向下移动,我不太喜欢它,毕竟它是另一个新对象......我的方法有任何明显的问题吗?
最佳答案
你应该看看 CommonJS 的 Promise 接口(interface)(由 jQuery.Deferred 实现),它提供了进度 callback在这种情况下可以使用它。
示例代码:
var waiter = $.Deferred();
var len = 2;
waiter.done(function() {
alert("Hooray!!!");
});
waiter.progress(function() {
if(--len === 0) {
waiter.resolve();
}
});
// somewhere
$.ajax({
...
data: somedata,
success: function() {
waiter.notify();
}
});
// somewhere else
$.ajax({
...
data: someotherdata,
success: function() {
waiter.notify();
}
});
有关延迟的更多信息:
- jQuery Deferred API
- 了解如何使用延迟 here
- How to use deferred objects in jQuery (来自OP的answer到同一问题)
关于javascript - Javascript 中的 Wait For All 同步模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524863/