Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中同步两个异步事件_Javascript_Jquery_Events_Javascript Events - Fatal编程技术网

在JavaScript中同步两个异步事件

在JavaScript中同步两个异步事件,javascript,jquery,events,javascript-events,Javascript,Jquery,Events,Javascript Events,在我的Javascript应用程序(jQuery)中,我有两个异步触发的事件 小部件1在完成加载时触发“Event1” 小部件2在加载完成时触发“Event2” 如何“同步”这两个异步事件,以便仅在触发这两个事件后“调用方法” 我需要一种同时适用于多个事件的方法。您可能想看看它提供了一种非常有趣且干净的同步异步操作执行的方法 例如,该方法允许您按顺序链接异步操作 这样的执行在您的实际代码中看起来既漂亮又简单: async.waterfall([ function(callback){

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

  • 小部件1在完成加载时触发“Event1”
  • 小部件2在加载完成时触发“Event2”
如何“同步”这两个异步事件,以便仅在触发这两个事件后“调用方法”

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

您可能想看看它提供了一种非常有趣且干净的同步异步操作执行的方法

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

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

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'    
});
使用延迟对象

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

使用回调函数?瀑布看起来真的像jquery$。当我误解了它的用途时,这实际上会链接调用,以便第二个在第一个之后运行,第三个在第二个之后运行,等等。这可能是可取的,也可能是不可取的,取决于具体情况。原始代码同时启动了两个任务,并且能够以任何顺序运行。@当然,在这种情况下,如果您想让您的操作以并行方式运行,没有任何东西阻止您使用
async.parralel
。+1告诉我这一点,我只是提醒自己这是如何工作的。只需添加从jQuery1.5开始的
ajax
调用实现
Promise
接口,假设所讨论的异步事件是
ajax
这应该正是您在。。。