Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-继续foreach_Javascript_Node.js_Foreach_Wait_Synchronous - Fatal编程技术网

Javascript-继续foreach

Javascript-继续foreach,javascript,node.js,foreach,wait,synchronous,Javascript,Node.js,Foreach,Wait,Synchronous,我有一段代码: 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

我有一段代码:

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);
    }
});
但当我开始“做下一件事”(interval complete)时,forEach循环不会继续到数组的下一个元素超时后a'被设置为true(类似于JS中的同步等待)。f_recipes是一个带有函数调用的字符串数组(例如“wait(20,false)”)


如何让它发挥作用?

你试图做的似乎是一个非常糟糕的主意,但承诺可以帮助你做到这一点(在这里使用蓝鸟,因为它提供了
承诺。延迟
承诺。每个
):

功能等待(秒,不进行手动等待){
return dontActuallyWait?null:承诺.延迟(秒*1000);
}
函数runSequence(things){
回报承诺。每个(事物、功能(事物){
返回评估(事物);
});
}
运行序列([
'console.log(“hello”),
'等待(2,错误)',
'console.log(“你好”),
“等待(5,错误)”,
'console.log(“再见”)'
]);

我不认为interval的函数会具有您期望的上下文。什么是
a
?设置在哪里?请解释这段代码应该做什么,而不是期望我们破译它。这段代码应该做什么还不是很清楚,但我很确定这是一个完全错误的方法。我不知道为什么你会期望
forEach
在间隔完成后继续下一项。在间隔开始之前很久,
forEach
就同步完成了。您还没有解释这段代码应该做什么。@user1798217您为什么要使用
eval
?为什么代码存储在字符串中而不是函数中?这似乎很不明智。