我有两个从 android 调用的 javascript 函数。经过长时间的调试 session 后,我终于意识到问题是由于第二个函数在第一个函数完成之前被调用而引起的。我已经用 deferred 等搜索了示例,但它们都依赖于另一个示例中的函数调用。
function FunctInit(someVarible){ //someVariable is sent from android, cannot call again from getResult
//init and fill screen
}
function getResult(){ //also getResult need to be called from android via button
//return some variables
}
如何强制 getResult 等待 FuncInit?有没有办法通过 Javascript 实现这一点?
最佳答案
在我看来,延迟/ promise (如您所提到的)是可行的方法,而不是使用超时。
这是一个 example我刚刚写的是为了演示如何使用 deferreds/promises 来做到这一点。
花点时间玩转 deferreds。一旦真正理解了它们,执行异步任务就会变得非常容易。
希望这对您有所帮助!
$(function(){
function1().done(function(){
// function1 is done, we can now call function2
console.log('function1 is done!');
function2().done(function(){
//function2 is done
console.log('function2 is done!');
});
});
});
function function1(){
var dfrd1 = $.Deferred();
var dfrd2= $.Deferred();
setTimeout(function(){
// doing async stuff
console.log('task 1 in function1 is done!');
dfrd1.resolve();
}, 1000);
setTimeout(function(){
// doing more async stuff
console.log('task 2 in function1 is done!');
dfrd2.resolve();
}, 750);
return $.when(dfrd1, dfrd2).done(function(){
console.log('both tasks in function1 are done');
// Both asyncs tasks are done
}).promise();
}
function function2(){
var dfrd1 = $.Deferred();
setTimeout(function(){
// doing async stuff
console.log('task 1 in function2 is done!');
dfrd1.resolve();
}, 2000);
return dfrd1.promise();
}
关于javascript函数等待另一个函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655851/