【问题标题】:.every() not waiting for HTTP request [duplicate].every() 不等待 HTTP 请求 [重复]
【发布时间】:2016-11-13 00:44:47
【问题描述】:

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

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

编辑:我不想按顺序运行它。我不介意它并行运行,但我只是想在完成时触发一个函数一次。

【问题讨论】:

标签: javascript node.js


【解决方案1】:

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

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

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

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

【讨论】:

  • 我不是一个数字..? i+1 将是 NaN。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2019-01-08
  • 2017-11-24
  • 2018-11-13
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多