节点请求多线程问题

时间:2016-09-27 08:20:52

标签: node.js request node-async

我想处理第一项(' http://www.google.com')array2.foreach在开始第二项之前完成(' http://www.amazon.com') 但请求是支持线程,所以这个结果是

http://www.google.com
http://www.amazon.com
http://www.apple.com
1
2
.
.

但我想成为

http://www.google.com
1
2
3
.
.
http://www.amazon.com
1
2
.
.

mycode的

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

var array1 = ['http://www.google.com', 'http://www.amazon.com', 
'http://www.apple.com'];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];

array1.each(function (item, callback) {

    console.log(item);
    aa(item, callback)

})

function aa(url) {

    request(url, function (err, res, html) {
        array2.forEach(function (item, callback) {
            //This part Current Page crawling
            console.log(item);
            sleep(1000);
        });
    })
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您已添加async模块但尚未使用。您需要使用它,您可能希望使用async.eachSeries()功能来满足您的需求。这是可以帮助您的代码

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

var array1 = ['http://www.google.com', 'http://www.amazon.com', 
'http://www.apple.com'];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];

function aa(url, callback) {

    request(url, function (err, res, html) {
        async.eachSeries(array2, function iteratee(item, callback2) {
            console.log(item);
            setTimeout(function() {
                callback2(null);
            }, 1000);
        }, function done() {
            callback(null)
        });
    })
}

async.eachSeries(array1, function iteratee(item, callback) {
    console.log(item);
    aa(item, callback)
}, function done() {
    console.log('completed');
});