2009-09-07 75 views
0

我知道有这样的方法:如何让JS等待...?

setTimeout("functionA();",1250); 

会延误我的过程,但问题是,在泛函有一定的价值回归。当我使用这种方式,它不能让我回到functionA返回值:

this.sth = setTimeout("functionA();",1250); 

我的意思是,this.sth不是我想要的结果。

回答

0

你可以这样做:

setTimeout(functionA(functionB()), 1250); 

并定义functionB为:

function functionB(resultFromA) { 
} 

functionA会是什么样子:

functionA(callback) { 
    // do something useful 
    callback(result); 
} 
+0

这似乎更令人困惑,而不仅仅是将返回值设置为一个变量,使用它的好处是什么? – Garrett 2009-09-07 19:46:34

1

你应该做一个functionB(),这是否:

function functionB() { 
    this.sth = functionA(); 
    // do things with the returned value 
} 
0

setTimeout是一个异步操作。这意味着functionA在超时后运行,但脚本的其余部分仍在运行。这是一个常见的错误新的JavaScript程序员认为脚本将导致此暂停。

如果您的目标是让脚本使用while循环或带日期的循环暂停您的最佳状态。但这可能是一个糟糕的主意。停顿的脚本可以为浏览器做出奇怪的事情,包括让整个浏览器在运行时暂停。这包括所有选项卡。这可能不是你想要的。最好的办法就是像Garret所说的那样做,使得操作可以异步执行,但仍能完成你想要的操作。

0

我已经看到了解决方案使用for循环与数千次/数百万次的迭代。不过要注意的是,如果使用不当,这可能会导致浏览器无法响应。