3

在我的 Javascript 应用程序(jQuery)中,我有两个异步触发的事件

  • 小部件 1 在完成加载时触发“Event1”
  • 小部件 2 在完成加载时触发“Event2”

我如何“同步”这两个异步事件,以便仅在这两个事件触发后“调用方法”。

我需要一种适用于多个事件的方法。

4

2 回答 2

12

使用延迟对象。

var deferredObj1 = $.Deferred(),
    deferredObj2 = $.Deferred();

$.when(deferredObj1,deferredObj2).done(function(){
    console.log("They are both done!");
});

// inside the Event1 handler:
deferredObj1.resolve();

// inside the Event2 handler:
deferredObj2.resolve();
于 2013-06-26T14:35:42.740 回答
1

您可能想看看async.js哪个提供了一种非常有趣且干净的方式来同步异步操作的执行。

例如,该waterfall方法允许您按顺序链接异步操作。

在您的实际代码中,这样的执行看起来既漂亮又简单:

async.waterfall([
    function(callback){
        callback(null, 'one', 'two');
    },
    function(arg1, arg2, callback){
        callback(null, 'three');
    },
    function(arg1, callback){
        // arg1 now equals 'three'
        callback(null, 'done');
    }
], function (err, result) {
   // result now equals 'done'    
});
于 2013-06-26T14:34:03.857 回答