簡體   English   中英

如何在node.js中獲得多個異步http請求及其回調的串行流控制?

[英]How to get serial flow control of multiple asynchronous http requests and their callbacks in node.js?

我已經嘗試了很多方法(隊列,有/沒有異步模塊,處理程序等),但我無法弄清楚如何將串行流控制應用於異步http請求及其回調。 我有一系列網址,我想用來發出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
});

任何建議將不勝感激。

callback傳遞給function(url, callback)的功能是什么觸發該系列中的下一個元素。 如果你只是在最后調用它,它就像你做一個for循環一樣循環。 您應該在請求的完成函數中調用該回調。 這樣,它將在請求完成后跳轉到下一個項目。

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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM