如何等待在javascript中定义元素?

如何等待在javascript中定义元素?,javascript,Javascript,我需要在javascript中执行与此等效的操作: while (typeof someObject == 'undefined') { sleep(10); // 10ms } 我只是不太明白如何编写代码 我有这个: function sleep(ms, callback, arg) { setTimeout(function() { callback(arg); }, ms); } function waitForDef(elem) {

我需要在javascript中执行与此等效的操作:

while (typeof someObject == 'undefined') {
     sleep(10);  // 10ms
}
我只是不太明白如何编写代码

我有这个:

function sleep(ms, callback, arg) {
    setTimeout(function() {
        callback(arg);
    }, ms);
}

function waitForDef(elem) {
    if (typeof elem == 'undefined') {
        sleep(10, waitForDef, elem);
    }
}

但是我不清楚如何从我的代码中使用它。

有一个持续检查元素的间隔:

var interval = setInterval(function() {
    // get elem
    if (typeof elem == 'undefined') return;
    clearInterval(interval);

    // the rest of the code
}, 10);

有一个持续检查元素的间隔运行:

var interval = setInterval(function() {
    // get elem
    if (typeof elem == 'undefined') return;
    clearInterval(interval);

    // the rest of the code
}, 10);


无论代码在哪里定义
someObject
,都应该接受一个回调函数,在定义变量后调用该函数。您可能应该直接将值传递给回调,而不是与全局变量共享状态。听起来您在寻找承诺。@meagar:没错。您应该使用回调函数。这通常是错误代码设计的症状。你到底想做什么?为什么需要等待此元素存在?为什么它不立即存在?是什么创造了它?何时创建?为什么要创建它?一旦它存在,你打算用它做什么?在我的页面被加载后,我需要调用一个js函数,该函数只会在一个表被赋予某个类后存在一段时间。当我试图从一个onload函数调用该函数时,大多数情况下都会失败,因为表中还没有该类。如果我从等待1秒的setTimeout调用该函数,它99%的时间都能工作。我只想等到类放在表上并且函数存在时再调用它。无论代码在哪里定义
someObject
,都应该接受回调函数,在定义变量后调用回调函数。您可能应该直接将值传递给回调,而不是与全局变量共享状态。听起来您在寻找承诺。@meagar:没错。您应该使用回调函数。这通常是错误代码设计的症状。你到底想做什么?为什么需要等待此元素存在?为什么它不立即存在?是什么创造了它?何时创建?为什么要创建它?一旦它存在,你打算用它做什么?在我的页面被加载后,我需要调用一个js函数,该函数只会在一个表被赋予某个类后存在一段时间。当我试图从一个onload函数调用该函数时,大多数情况下都会失败,因为表中还没有该类。如果我从等待1秒的setTimeout调用该函数,它99%的时间都能工作。我只想等到类被放在表上,函数存在,然后调用它。这看起来对我来说非常合适。我已经实现了它,到目前为止还不错。我还需要再运行一段时间才能确定。谢谢这有点棘手,因为它不是我等待的元素,而是一个属性。因此,我必须首先等待元素存在,然后等待它具有属性。但是你的回答让我走上了正确的道路。你应该仍然只能做一次间歇。你有两个吗?没有,只有一个。我首先测试元素,然后测试属性。这看起来对我来说非常合适。我已经实现了它,到目前为止还不错。我还需要再运行一段时间才能确定。谢谢这有点棘手,因为它不是我等待的元素,而是一个属性。因此,我必须首先等待元素存在,然后等待它具有属性。但是你的回答让我走上了正确的道路。你应该仍然只能做一次间歇。你有两个吗?没有,只有一个。我首先测试元素,然后测试属性。