[英]Node.js async looping function
我是Node.js的新手,正在努力了解這是否是執行以下操作的正確方法:
我正在使用狼瘡處理for循環,並且正在查詢twitter API,然后嘗試在返回的json中獲取最大的id,為此我正在使用lodash 。 獲得此值后,我想再次運行循環,但這一次將值傳遞給函數。 我使用async.js遍歷返回的JSON
lupus(0, loopLength, function(n) {
var maxId;
T.get('favorites/list', {count: 200, max_id: maxId}, function(err, data, response) {
if (err) {
throw (err);
}
maxId = _.max(_.pluck(data, "id"));
async.each(data, function(file, callback) {
console.log(file)
}, function(err){
if( err ) {
console.log('A file failed to process: '+ err);
});
})
}, function() {
console.log('All done!');
});
})
似乎maxId
從未設置,因此.each
循環從不獲取下一組JSON。 我的問題是我是否正確執行此操作,以及如何從.each
函數獲取maxId的值。
問題是您正在進行兩個異步操作(狼瘡“循環”和T.get
調用),並且它們之間基本上沒有協調。
因為T.get
將是異步的,所以我根本不會在這里使用狼瘡(ugh!):
var index = 0;
var maxId;
next();
function next() {
T.get('favorites/list', {count: 200, max_id: maxId}, function(err, data, response) {
if (err) {
throw (err);
}
maxId = _.max(_.pluck(data, "id"));
async.each(data, function(file, callback) {
console.log(file)
}, function(err){
if( err ) {
console.log('A file failed to process: '+ err);
});
if (++index < loopLength) {
next();
} else {
console.log('All done!');
}
});
}
代碼中有一些無關的東西看起來不正確:
在第一次給T.get
調用時,從未使用過maxId
情況下就在使用它。 好像您要在那里有某種初始值。
您在T.get
回調中拋出了錯誤。 T.get
的文檔是否告訴您它將為該錯誤做些有用的事情? 如果沒有,您可能想要做其他事情。 投擲不會有,例如,停止循環在你的原代碼( 它將與上面的代碼)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.