并行执行功能并等待其完成

Parallel execution of the functions and waiting for their completion

本文关键字:等待 功能 并行执行      更新时间:2023-09-26

我怎么能等到这两个函数结束,并且只有在为它们调用回调之后才能继续脚本。

我注意到了jQuery deferred.then(),但我不知道如何在中使用它

GoogleDriveModule.checkAuth(function(authResult) {
  if (authResult) {
    return parts_count += 1;
  }
});
DropboxModule.isAuthenticated(function(authResult) {
  if (authResult) {
     return parts_count += 1;
  }
});

创建两个延迟对象并在回调中解析它们。然后您可以使用$.when:等待两个延迟

var googleDone = $.Deferred(),
    dropboxDone = $.Deferred();
GoogleDriveModule.checkAuth(function(authResult) {
  googleDone.resolve();
  if (authResult) {
    return parts_count += 1;
  }
});
DropboxModule.isAuthenticated(function(authResult) {
  dropboxDone.resolve();
  if (authResult) {
     return parts_count += 1;
  }
});
$.when(googleDone, dropboxDone).then(function() {
    alert("Both authentication checks completed.");
});

如果准备好了,可以有2个布尔值并签入回调函数:

var gDriveREADY = false, dBoxREADY = false;
GoogleDriveModule.checkAuth(function(authResult) {
    if (authResult) {
        return parts_count += 1;
    }
    gDriveREADY = true;
    doSomething()
});
DropboxModule.isAuthenticated(function(authResult) {
    if (authResult) {
        return parts_count += 1;
    }
    dBoxREADY = true;
    doSomething();
});
function doSomething(){
    if(dBoxREADY && gDriveREADY){
        //Your code
    }
}

在回调中,您可以切换一个其他函数检查的简单标志:

var driveDone = 0
  , dropDone = 0
  ;
GoogleDriveModule.checkAuth(function(authResult) {
  driveDone = 1;
  if (authResult) {
    parts_count += 1;
  }
  if(dropDone){
   bothDone();
  }
});
DropboxModule.isAuthenticated(function(authResult) {
  dropDone = 1;
  if (authResult) {
     parts_count += 1;
  }
  if(driveDone){
   bothDone();
  }
});
function bothDone(){}

这比延迟方法开销更小,但也不那么干净。