Javascript同步循环,等到它完成?

时间:2014-10-31 16:41:15

标签: javascript multithreading loops requestanimationframe

我正在尝试在Javascript中实现这种逻辑:

LOOP
    doStuff();
END
console.log("Stuff has been done");

我设法这样做了:

var loop = function() {
    console.log("events");
    window.requestAnimationFrame(loop);
}
window.requestAnimationFrame(loop);
console.log("loop is finished");
someOtherCodeGoesHere();

但它不起作用。嗯,确实如此,但是甚至在调用RAF之前就会出现“循环结束”。这整个代码虽然有意义,但它并不像我想要的那样有效。

我还发现,一旦条件满足,我可以让loop()返回一个回调函数,但我不想在其中包含 someOtherCodeGoesHere(); ,因为它不是我想要的是。假设我有10个循环,我会有一个回调地狱。我只是希望它继续使用代码流,如果你愿意,就像一个普通的GOTO。

欢迎任何想法! :)

1 个答案:

答案 0 :(得分:0)

我不熟悉window.requestAnimationFrame()方法,但由于您将回调作为唯一参数传递,我认为它是一个异步函数。这意味着它的调用不会阻止后面的方法的执行。在调用console.log之前,无法保证RAF方法将调用您传入的回调。通常,您希望在异步方法运行后发生的任何逻辑应该放入回调。处理回调可能会很痛苦,因此像async这样的库可以提供很大的帮助。以下是如何使用async lib编写此示例的示例。 (这段代码假设你想要一个无限循环,因为你在代码中尝试了递归)

var loop = function() {
    window.requestAnimationFrame(function() {
        console.log("events");
    });
}
async.forever(loop, function(err) {
    console.log(err); // Only gets called if an error occurs
});