在我的Javascript App(jQuery)中,我有两个异步触发的事件
我如何“同步”这两个异步事件,以便在触发这两个事件后“调用方法”。
我还需要一种适用于多个事件的方法。
答案 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'
});