我正在使用流行的节点请求模块为数组中的每个项目运行HTTP GET请求;然后在数组的最后一项运行一个函数。我的代码是这样的:
const request = require('request');
var arr = ['John', 'Jane', 'Marry', 'Scarlet'];
var x = 0;
arr.every(function (i) {
x++;
/*instead of waiting for request, it adds x and moves on making x
3 when the first request finally runs*/
request({
url: 'http://localhost:8810/getLastName?firstName=' + i
}, function (error, response, body) {
//execute some code
if(x==arr.length){
//therefore this function is run for each item in the array.
// it should run only once per array.
}
})
return true;
})
我希望在不编写大量代码的情况下实现这一目标,从而保持代码的整洁。
编辑:我没有尝试按顺序运行它。我并不介意它并行运行,但我只是试图在完成时触发 一次 功能。答案 0 :(得分:0)
不使用变量x
,而是使用every
回调函数本地的every
的第二个参数:
arr.every(function (i, j) {
// ...
if (j+1==arr.length) ...
虽然变量x
对于所有迭代都是通用的,但每次迭代都有自己的j
版本,因为它是在回调闭包中声明的。因此,它不会为您提供x
时遇到的问题。