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
?为什么代码存储在字符串中而不是函数中?这似乎很不明智。