2016-03-06 31 views
0

我有一个脚本,它使用来自数据层的数据。如果我太早启动脚本,它不起作用,因为数据(我在脚本中提到)尚未定义。所以我推迟了脚本(1500ms)。问题是脚本应该尽可能早地运行。有时数据(从数据层)可用更快,有时后...JS - 延迟脚本的执行,直到所有数据定义/可用

所以,而不是延迟我的脚本总是1500ms,我想在500毫秒后运行脚本,如果它不工作,因为数据/ property is not defined/available yet,I want to run it again after another 500ms .... etc.

我怎么能这样做?

thx !!

+0

“数据层”?如果你正在进行异步调用,那么在回调/ promise/etc中执行你需要做的任何事情?我们看不到你在做什么。 –

回答

0
// set function to run every 500 ms, and store reference 
var interval = setInterval(function(){ 
    // if the data is available, clear the interval, and process data 
    if(typeof data !== 'undefined') { 
     clearInterval(interval) 
     console.log('data is ready'); 
     // ready to start processing 
    } 
}, 500); 

但是,这种方法很少是最好的方法。根据数据的可用性,最好使用回调/承诺或事件侦听器。

例如,使用jQuery取一些数据,然后在回调作出反应...

$.get('/some/data/uri', function(data){ /* do something with data */ }); 
+0

p.s.半秒处理循环的时间相当长,不会造成太大的影响。我记得在旧的浏览器上,它们不会启动准备好的事件,而是看到准备好的实现有9毫秒的时间间隔来测试是否已完成渲染。 –

+0

谢谢!非常有用的输入! – noob

+0

它按预期工作。但是在控制台中,我得到一个“未捕获的TypeError:无法读取属性......如何在脚本运行期间避免/静音错误并检查数据是否已定义。 – noob