节点同步运行,等待循环完成
我在项目中已经列举了一些问题,因为节点是异步的,但现在我有一个for loop
,并且我在循环结束或休息之后做了一些事情,看起来好像同步工作,我想知道为什么。节点同步运行,等待循环完成
我有这样的代码:
var newItem = true;
for (var i = 0; i < cart.length; i++) {
if (cart[i].title == slug) {
cart[i].qty++;
newItem = false;
break;
}
}
if (newItem) {
cart.push({
title: slug
});
}
而这一切按预期工作! newItem
变量始终具有正确的值。
怎么新来的东西不总是true
?
我从来没有在cart
数组中有超过3个项目,这是为什么?如果我有1000件物品,它会有不同的表现吗?
你提供的同步运行,如果你想测试它是否工作在异步状态下尝试运行该代码的代码
var newItem = true;
for (var i = 0; i < cart.length; i++) {
setTimeout(function(){
if (cart[i].title == slug) {
cart[i].qty++;
newItem = false;
break;
}
}, 1000);
}
if (newItem) {
cart.push({
title: slug
}
}
我有类似的代码,其中数据库正在循环内部更新,循环完成后,我从数据库中得到结果,但结果总是落后一步,代码与此类似。从数据库获取结果的代码并没有等待循环完成,所以我不明白为什么'if(newItem)'在这里等待循环结束。 –
这里的代码是如何形成代码的问题在这里https://*.com/questions/45484161/locals-variable-not-updating-correctly? –
在这个例子中,if会在for循环之后运行,但是因为它正在进行异步调用,所以setTimeout内部的部分至少会在1秒之后发生,因此在循环完成后newItem最初会是假的 – marvel308
这个代码是同步的,这就是为什么 – marvel308
似乎但是我没有认为它应该表现如此。我在另一个实例中有一个for循环,并在循环内部更新了数据库,并且在循环之后也得到了一些结果,并且它不能同步工作,我不得不使用回调来创建一个函数。 –