Nodejs 识别异步任务的输出
Nodejs Identify output of asyntasks
我是 nodejs 的新手,我正在使用请求 nodejs api 发出多个 get 请求,
有了这个,我无法弄清楚特定请求的输出。如何分别识别每个请求的响应?我正在使用 for 循环发送多个请求。如果我使用递归,它又变成同步的,我只需要将请求与过于异步的响应分开。可能吗?
在下面的代码中,变量 'i' 被最后一次迭代替换。
var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']
function ss(list){
for(var i in list) {
request(list[i], function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log( i + " " +body);
}
})
}
}
您可以使用 async library 来执行异步请求。
具体来说,您可以使用 async.each
或 async.eachSeries
.
两者之间的区别在于each
将运行所有请求并行,就像for
循环一样,但会保留上下文,而不是eachSeries
这将 运行 一次请求一个(第二次迭代将仅在您调用第一次的回调函数时开始)。此外 - 对于更具体的用例还有其他选项(例如 eachLimit
)。
示例代码使用 each
:
var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']
function ss(list){
async.each(list, function(listItem, next) {
request(listItem, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log( listItem + " " +body);
}
next();
return;
})
},
//finally mehtod
function(err) {
console.log('all iterations completed.')
})
}
我是 nodejs 的新手,我正在使用请求 nodejs api 发出多个 get 请求, 有了这个,我无法弄清楚特定请求的输出。如何分别识别每个请求的响应?我正在使用 for 循环发送多个请求。如果我使用递归,它又变成同步的,我只需要将请求与过于异步的响应分开。可能吗?
在下面的代码中,变量 'i' 被最后一次迭代替换。
var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']
function ss(list){
for(var i in list) {
request(list[i], function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log( i + " " +body);
}
})
}
}
您可以使用 async library 来执行异步请求。
具体来说,您可以使用 async.each
或 async.eachSeries
.
两者之间的区别在于each
将运行所有请求并行,就像for
循环一样,但会保留上下文,而不是eachSeries
这将 运行 一次请求一个(第二次迭代将仅在您调用第一次的回调函数时开始)。此外 - 对于更具体的用例还有其他选项(例如 eachLimit
)。
示例代码使用 each
:
var list = [ 'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%20Mobiles%20with%20best&phrase2=Mobiles%20with%20best',
'http://swoogle.umbc.edu/SimService/GetSimilarity?operation=api&phrase1=%2520Mobiles%2520with%2520best&phrase2=what%20is%20a%20processor']
function ss(list){
async.each(list, function(listItem, next) {
request(listItem, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log( listItem + " " +body);
}
next();
return;
})
},
//finally mehtod
function(err) {
console.log('all iterations completed.')
})
}