在 nodejs 中同步调用 api

making api calls in sync in nodejs

我的代码是这样的:

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 的异步特性。但我该如何解决呢?如何让外循环等待内循环完成?

希望我已经足够清楚了。提前致谢!!

您可以使用 NPM 上的 async.js 模块来做到这一点。对于您的情况,您要搜索的函数是 async.series。这是它的文档:https://caolan.github.io/async/docs.html#seriesasync.series 可用于首先 运行 第一个 get 请求,然后是第二个 get 请求,但这并不意味着它将等待第一个循环(上面的 for)完成迭代以转到下一个。为此,您可能需要嵌套两个异步循环。

您可以使用 Javascript 原生的 async module which is my favorite since you understand very easily how it works from the function name, but you can also use promises,这是一个很好的优势,因为许多初学者甚至在不知道回调如何工作的情况下都在使用 promises!所以 promises 正在成为一种标准。

如果您想了解有关这些概念的更多信息:您可以查看此 tutorial for async or this one for promises

如果你想先迭代循环然后你可以使用async.EachSeries

所以它会迭代,你会得到一个一个的值,你可以使用回调,所以它会同步工作。