【发布时间】:2017-04-25 17:44:06
【问题描述】:
我的代码是这样的:
for(let query of array1){
request.get(query, function(err, res, body){
var array2 = body
for (let query2 of array2){
request.get(query, function(err, res, body){
var variable1 = body
updateDB(query, query2 , variable1)
});
}
});
}
假设 Array1 是 [1,2,3,4]
第一个循环 array2 将 [a,b,c,d] (第二个循环将给出 [e,f,g,h] 等等)。
现在我的 updateDB 只是在每个循环中更新 array2 的第一个值[在上面的情况下只是为 a 和 e]。我希望它在移动到第二组array2(即[e,f,g,h])之前遍历array2的所有元素(如b,c,d)。
我知道这是因为 js 的异步特性而发生的。但是我该如何解决呢?如何让外循环等待内循环完成?
希望我足够清楚。提前致谢!
【问题讨论】:
-
这不是一个异步问题,而是一个经典的闭包问题。查找“for 循环中的 JavaScript 闭包”以及为什么通常不鼓励这样做。
-
我知道,这不是编写 js 的正确方法,但我们正在进行一些数据库更改,因此我不得不编写一个。这只是一次使用(希望如此),不会在生产中使用。
标签: node.js asynchronous async-await synchronous