Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何在node.js中获得多个异步http请求及其回调的串行流控制?_Json_Http_Node.js_Asynchronous_Callback - Fatal编程技术网

Json 如何在node.js中获得多个异步http请求及其回调的串行流控制?

Json 如何在node.js中获得多个异步http请求及其回调的串行流控制?,json,http,node.js,asynchronous,callback,Json,Http,Node.js,Asynchronous,Callback,我已经尝试了很多方法(队列、带/不带异步模块、处理程序等),但我不知道如何将串行流控制应用于异步http请求及其回调。我有一个URL数组,我想用来发出http请求,并在每个响应中插入单个文档到mongo db集合中。一旦插入完成,我想继续下一个http请求。这里是我的位置,但这仍然会在插入之前启动所有http请求 var request = require('request'); var async = require('async'); var urls = ['http://getsome

我已经尝试了很多方法(队列、带/不带异步模块、处理程序等),但我不知道如何将串行流控制应用于异步http请求及其回调。我有一个URL数组,我想用来发出http请求,并在每个响应中插入单个文档到mongo db集合中。一旦插入完成,我想继续下一个http请求。这里是我的位置,但这仍然会在插入之前启动所有http请求

var request = require('request');
var async = require('async');

var urls = ['http://getsomejson/1', 'http://getsomejson/2', 'http://getsomejson/3'];

async.forEachSeries(urls, function(url, callback) {
    // All of these requests are firing before http request callback logic is executed
    request(url, function (error, response, body) {
        async.forEachSeries(body.docs, function(doc, callback) {
            // Do the inserts for this response
            callback();
        }, function(err) {
            // handle errors
        });
    })
    callback();
}, function(err) {
    // handle errors
});

任何建议都将不胜感激。

传递给
函数(url,callback)
函数的
回调
函数将触发系列中的下一个元素。如果你在结尾这样调用它,它就是在做一个循环,就像你做了一个
for
循环一样。您应该在请求的completion函数中调用该回调。这样,在请求完成后,它将跳转到下一项

async.forEachSeries(urls, function(url, callback) {
  // All of these requests are firing before http request callback logic is executed
  request(url, function (error, response, body) {

    async.forEachSeries(body.docs, function(doc, callback) {
      // Do the inserts for this response
      callback();
    }, function(err) {
      // handle errors

      callback();
    });
  })
}, function(err) {
  // handle errors
});

您何时调用“回调”函数?在本例中,我使用请求模块发出请求,因此我所指的回调是函数(错误、响应、正文){}我需要能够在每次请求后控制这里的内容,但在所有请求都被激发之前,我不知道如何执行。对不起,我编辑了代码示例,以显示对所引用回调的调用。我的申请表中有这些,所以这不是问题所在。