我有这个函数Offline.check();
,需要1秒才能执行。所以下面的函数没有等待它,它总是在第一次返回false。我使用了set time out ..但那总是返回null
function checkstats()
{
Offline.check(); // This returns Offline.state=up or down and it takes 1 seconds to complete.
if(Offline.state=="up")
{
return true;
}
else
{
return false;
}
}
var a = checkstats();
答案 0 :(得分:1)
理想情况下,您可以使用Offline.check
设置回调函数,但我知道它是外部函数,因此无法正常工作。
您可以使用超时等待Offline.state
设置,但是您也需要异步执行涉及变量a
的任何操作:
function checkstats(callBack){ // checkstats() now takes a callback
Offline.check(); // Start Offline.check() as usual
setTimeout(function(){ // Set a timeout for 1 second
if(Offline.state=="up") // After 1 second, check Offline.state as usual
{
callBack(true); // ...but we call the callback instead of returning
}
else
{
callBack(false); // ...but we call the callback instead of returning
}
}, 1000);
}
checkstats(function(a){ // This anonymous function is the callback we're using
// Now you can use "a" normally
});
如果您不确定Offline.check()
将正好用1秒,您可以使用间隔而不是超时,并尝试每秒,例如5秒:
function checkstats(callBack){
Offline.check();
var attempt = 0, maxAttempts = 5;
var checkStatsInterval = setInterval(function(){
if(++attempt > maxAttempts){
// Ran out of attempts, just give up
clearInterval(checkStatsInterval);
alert('Waited '+maxAttempts+' seconds for Offline data. Giving up!');
return;
}
if(Offline.state){
clearInterval(checkStatsInterval);
// It's loaded! Now confidently check Offline.state
if(Offline.state=="up")
{
callBack(true);
}
else
{
callBack(false);
}
}
}, 1000);
}
checkstats(function(a){
// Now you can use "a" normally
});
答案 1 :(得分:0)
您可以使用异步JavaScript来解决此问题。有几种方法可以在JavaScript中实现异步行为。您可以使用Callbacks,Listeners或Promises。
无论如何,如果您确定它只需要1秒钟,则在回调函数中设置setTimeout并允许Offline.check()
完成。 (如果它是外部的或懒惰的那里实现异步)
doOfflineCheck(function(){
if(Offline.state=="up")
{
return true;
}
else
{
return false;
}
});
function doOfflineCheck(cb){
setTimeout(function(){
Offline.check();
},1000);
}