0

JS控件调用数据服务并继续呈现自身而不等待结果。有时,服务会在控件完全呈现后返回,有时 - 之前。你如何WaitForAll实施JS?我正在使用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: {...}});

one触发句柄,句柄two在其e. Waiter 是一个额外的“全局”变量,沿着堆栈向下移动,我不太喜欢它,毕竟它是另一个新对象......我的方法有什么明显的问题吗?

4

2 回答 2

3

您应该看一下 CommonJS 的 promise 接口(由jQuery.Deferred实现),它提供了可以在这种情况下使用的进度回调。

示例代码:

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();
    }
});

更多关于延期:

于 2013-05-13T14:59:41.340 回答
0

我已经找到了我需要 jQuery Deferred 的小麦,请参阅文章: http ://richardneililagan.com/2011/05/using-deferred-objects-in-jquery-1-5/

于 2013-05-14T12:00:16.903 回答