在JavaScript中同步两个异步事件

时间:2013-06-26 14:31:07

标签: javascript jquery events javascript-events

在我的Javascript App(jQuery)中,我有两个异步触发的事件

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

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

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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'    
});