javascript - Javascript 中的 Wait For All 同步模式

标签 javascript jquery

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 中具有标记为 onetwo 的值。 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();
    }
});

有关延迟的更多信息:

关于javascript - Javascript 中的 Wait For All 同步模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524863/

相关文章:

javascript - html 为在每个浏览器中正常工作的每个选项选择不同的背景颜色?

jquery - 我的 jQuery CDN url 正确吗?

javascript - Bootstrap 模态加载但无响应

javascript - 加载功能,更新动态内容

javascript - 如何将 C 程序转换为等效的 JavaScript 程序?

Javascript - 找不到导入

javascript - 了解backbone.js集合

javascript - 通过ejs模板执行onclick函数

php - 在注册期间规范化/验证用户的 'City' 输入

jquery - Intellisense 不适用于 Visual Studio 2012 中的 JavaScript