簡體   English   中英

Javascript - 繼續 foreach

[英]Javascript - continue foreach

我有一段代碼:

var a = false;

function wait(milliseconds, async) {
if(!async) {
setTimeout(function() {
        console.log('Sync timer done.');
        a = true;
        return true;
    }, milliseconds*1000);
}
(...)
f_recipe.forEach(function(item, index) {
    if (obj['actual_step'] != 0 && obj['actual_step'] != index ) {
            e = "Desync";
        throw e;
    };
    console.log("Step: " + obj.actual_step);
    if(item.substr(item.length - 6) != "false)"){
        if (eval(item)) {
        obj['actual_step']++;
        }
    } else {
        eval(item);
        var ival = setInterval(function(){
            if(a) {
                console.log('do the next thing');
                clearInterval(ival);
            }
        }, 1000);
    }
});

但是當我開始“做下一件事”(間隔完成)時,forEach 循環不會繼續到數組的下一個元素。 'a' 在超時后設置為 true(在 JS 中是一種同步等待)。 f_recipes 是一個帶有函數調用的字符串數組(例如'wait(20, false)')。

如何讓它工作?

您嘗試做的事情似乎是一個非常糟糕的主意,但Promise.delay可以幫助解決這個問題(在這里使用 Bluebird 因為它提供了Promise.delayPromise.each ):

 function wait(seconds, dontActuallyWait) { return dontActuallyWait ? null : Promise.delay(seconds * 1000); } function runSequence(things) { return Promise.each(things, function(thing) { return eval(thing); }); } runSequence([ 'console.log("hello")', 'wait(2, false)', 'console.log("hello again")', 'wait(5, false)', 'console.log("goodbye")' ]);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.5.1/bluebird.min.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM