Javascript 并行执行函数并等待其完成
我怎样才能等到这两个函数结束,并且只有在为它们调用回调后才能继续脚本 我注意到jQuery deferred.then(),但我不知道如何在我的案例中使用它Javascript 并行执行函数并等待其完成,javascript,jquery,asynchronous,callback,deferred,Javascript,Jquery,Asynchronous,Callback,Deferred,我怎样才能等到这两个函数结束,并且只有在为它们调用回调后才能继续脚本 我注意到jQuery deferred.then(),但我不知道如何在我的案例中使用它 GoogleDriveModule.checkAuth(function(authResult) { if (authResult) { return parts_count += 1; } }); DropboxModule.isAuthenticated(function(authResult) { if (aut
GoogleDriveModule.checkAuth(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
DropboxModule.isAuthenticated(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
创建两个延迟对象并在回调中解析它们。然后,您可以通过以下方式等待两个延期:
创建两个延迟对象并在回调中解析它们。然后,您可以通过以下方式等待两个延期:
您可以使用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
}
}
您可以使用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(){}
与延迟方法相比,该方法的开销更小,但没有那么干净。在回调中,您可以切换一个简单的标志,其他函数将检查该标志:
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(){}
与延迟方法相比,这种方法的开销更小,但没有那么干净。@Karl AndréGagnon:我认为这种差异是无法衡量的,但从绝对意义上讲,它肯定会“更慢”。这里的主要吸引力在于,您可以继续将任何延迟项(主项或子项)链接或集成到任何其他异步管道中。@Karl AndréGagnon:我不认为这种差异是可以测量的,但从绝对意义上讲,它肯定会“更慢”。这里的主要吸引力在于,您可以继续将任何延迟(主管道或子管道)链接或集成到任何其他异步管道中。