节点请求多线程问题
node request multi thread issue
我要处理第一项('http://www.google.com') array2.foreach complete before start second item('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
.
.
我的代码
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);
});
})
}
我该怎么做?
您已添加 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');
});
我要处理第一项('http://www.google.com') array2.foreach complete before start second item('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
.
.
我的代码
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);
});
})
}
我该怎么做?
您已添加 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');
});