.every()不等待HTTP请求

时间:2016-11-13 00:44:48

标签: javascript node.js

我正在使用流行的节点请求模块为数组中的每个项目运行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;
})

我希望在不编写大量代码的情况下实现这一目标,从而保持代码的整洁。

编辑:我没有尝试按顺序运行它。我并不介意它并行运行,但我只是试图在完成时触发 一次 功能。

1 个答案:

答案 0 :(得分:0)

不使用变量x,而是使用every回调函数本地的every的第二个参数:

arr.every(function (i, j) {
 // ...

if (j+1==arr.length) ...

虽然变量x对于所有迭代都是通用的,但每次迭代都有自己的j版本,因为它是在回调闭包中声明的。因此,它不会为您提供x时遇到的问题。