从下面的代码我没有得到result1数据。这是未定义的。有人能帮助我吗?
async.waterfall([
function(callback) {
request({
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
url: url
}, function(error, response, body) {
if (error) {
callback(error);
} else {
var result = JSON.parse(body);
callback(null, result); //sending to next function
}
});
},
function(result, callback) {
async.eachSeries(result, function(item, callback) {
request({
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
url: url+item.id
}, function(error, response, body) {
if (error) {
callback(error);
} else {
var result1 = JSON.parse(body);
callback(null, result1);
}
});
}, function(err, result1) {
if (!err) {
callback(null, result1);
} else {
callback(err);
}
});
},
function(result1, callback) {
console.log(result1); // getting undefined
request({
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
url: url
}, function(error, response, body) {
if (error) {
callback(error);
} else {
var result2 = JSON.parse(body);
callback(null, result2);
}
});
}
], function(error, res) {
console.log(res); // process final result
});
答案 0 :(得分:2)
对于eachSeries
签名看起来像这样 - 回调(错误),没有第二个参数,这就是为什么result1
是undefined
如果您需要在循环结束时获得结果,则需要使用.mapSeries
,如此
async.mapSeries(result, function(item, callback) {
request({
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
url: url + item.id
}, function(error, response, body) {
if (error) {
callback(error);
} else {
var result1 = JSON.parse(body);
callback(null, result1);
}
});
}, function(err, result1) {
if (!err) {
callback(null, result1);
} else {
callback(err);
}
});