当调用函数true
时,我希望结果为checkLoading()
。
我有一个jquery函数:
function checkLoading() {
console.log('checking loading');
if ($('div.vX.UC').css('display') === 'none') {
console.log('Loading Complete');
return true;
} else {
setTimeout(function() {
checkLoading();
}, 500)
}
}
我正在调用此函数,如下所示:
if(checkLoading()){
// do something
}
但是上面的函数返回undefined
而不是等待final
返回。
我使用Deferred
尝试了此操作。但这不起作用,我尝试了下面的解决方案:
function checkLoading() {
var dfrd1 = $.Deferred();
console.log('checking loading');
if ($('div.vX.UC').css('display') === 'none') {
console.log('Loading Complete');
return dfrd1.promise();
} else {
setTimeout(function() {
checkLoading();
}, 500)
}
// return dfrd1.resolve();
//return false;
}
checkLoading().done(function() {
// do something.
});
但是这个解决方案并不适合我。
答案 0 :(得分:3)
var dfrd1 = $.Deferred();
function checkLoading(dfd) {
console.log('checking loading');
if ($('div.vX.UC').css('display') === 'none') {
console.log('Loading Complete');
return dfd.resolve();
} else {
setTimeout(function() {checkLoading(dfd)}, 500)
}
return dfd.promise();
}
checkLoading(dfrd1).then(function() {
});
答案 1 :(得分:1)
如果不使用promises,您传统上也可以使用回调。
function checkLoading(callback) {
console.log('checking loading');
if ($('div.vX.UC').css('display') === 'none') {
console.log('Loading Complete');
callback();
} else {
setTimeout(function() {
checkLoading();
}, 500)
}
}
会像这样使用:
checkLoading(function() {
// do something
});
答案 2 :(得分:0)
你应该尝试如下:
function checkLoading() {
var dfrd1 = $.Deferred();
console.log('checking loading');
if ($('div.vX.UC').css('display') === 'none') {
console.log('Loading Complete');
dfrd1.resolve("Loading Completed");
} else {
setTimeout(checkLoading, 500)
}
return dfrd1.promise();
}