我怎样才能等到两个函数结束,并且只有在为它们调用回调之后才能继续执行脚本。
我注意了jQuery deferred.then(),但我不明白如何在我的情况下使用它
GoogleDriveModule.checkAuth(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
DropboxModule.isAuthenticated(function(authResult) {
if (authResult) {
return parts_count += 1;
}
});
答案 0 :(得分: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.");
});
答案 1 :(得分:0)
你可以有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 :(得分:0)
在回调中,您可以切换另一个函数检查的简单标志:
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(){}
这比延迟方法的开销更少,但不是那么干净。