javascript - 使用 typeof 等待直到变量存在会导致无限循环

标签 javascript function typeof

我需要一个等待变量出现的函数。

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/

相关文章:

javascript - 关于 javascript 的排序函数

javascript - .load() [从第二页] 函数工作,但不从第二页加载 jquery

javascript - 如何防止可观察的发射值发生突变

javascript - 尝试将此代码包装在命名函数中

c - C90 中的 Linux 内核 container_of 宏和通用容器

javascript - 如何在 Three.js 中设置可见性动画?

c - C 中的安全函数是否比不安全的函数更快,反之亦然?

javascript - 最后定义的原型(prototype)函数总是在对象初始化时运行

typescript - "keyof typeof"在 TypeScript 中是什么意思?

SQLITE:使用 CHECK TYPEOF() 检查 INSERT 的类型