我需要一个等待变量出现的函数。
function wait(variable, callback) {
if (typeof variable !== "undefined")
callback();
else
setTimeout(function () {
wait(variable, callback);
}, 0)
}
使用下面的示例代码调用此函数会导致无限循环。
var a;
wait(a, function(){console.log('success')});
setTimeout(function(){a=1}, 1000)
为什么?
最佳答案
JavaScript 是 pass by value ,因此当您将 a
传递给 wait
时,您只需传递值 undefined
。
您可以尝试为等待条件传递一个函数:
var a;
console.log('started');
wait(function(){return a}, function(){console.log('success')});
setTimeout(function(){a=1}, 1000)
function wait(condition, callback) {
if (typeof condition() !== "undefined") {
callback();
} else {
setTimeout(function () {
wait(condition, callback);
}, 0)
}
}
您还可以扩展此方法,使其不仅等待变量存在,还可以等待它具有特定值或其他内容。
如果您使用 NPM 和 promises,已经有一个库可以做到这一点:wait-until-promise .可能还有其他人也使用经典回调。
关于javascript - 使用 typeof 等待直到变量存在会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41328534/