我的代码是这样的:
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的异步性质而发生的。但我该如何解决呢?如何使外循环等待内循环完成?
希望所以我很清楚。在此先感谢!!
答案 0 :(得分:1)
你可以使用NPM上的async.js模块来做到这一点。对于您的情况,您要搜索的功能是score
。以下是它的文档:https://caolan.github.io/async/docs.html#series。 async.series
可用于首先运行第一个get请求,然后运行第二个get请求,但这并不意味着它将等待第一个循环(upper for)完成itteration以转到下一个循环。为此,您可能希望嵌套两个异步循环。
答案 1 :(得分:0)
你可以使用我最喜欢的async模块,因为你很容易从函数名中理解它是如何工作的,但你也可以使用Javascript原生的promises,这是一个很好的加分,因为许多初学者甚至在不知道回调是如何工作的情况下使用承诺!所以承诺正在成为一种标准。
如果您想详细了解这些概念:可以查看tutorial for async或this one for promises
答案 2 :(得分:0)
如果您想首先迭代循环,那么您可以使用async.EachSeries
所以它将迭代&你将得到一个一个值和一个值你可以使用回调,因此它将同步工作。