【发布时间】:2013-06-05 15:27:13
【问题描述】:
我是 node.js 的新手,我不知道如何控制程序流程,以便我的函数等待带有内部回调的 Underscore _.each() 块。我真的很想避免令人发指的回调炖菜。这个块在一个已经被 nimble 的 .series([]) 控制的链中
function (callback) { //get common friends
_.each(User.friends, function (friend) { //I NEED THE FLOW TO WAIT TIL THIS COLLECTION HAS ITERATED AND ALL THE CALLBACKS ARE COMPLETE
request.get({
url: 'https://graph.facebook.com/me/mutualfriends/' + friend.id + '?access_token=' + User.accessToken,
json: true
}, function (error, response, body) { //NEED TO WAIT TIL THESE ARE ALL COMPLETED
if (!error && response.statusCode == 200) {
console.log("common friends", body.data);
} else {
console.log(error);
}
});
}, this);
callback(); //Nimble's serialization callback fires immediately
},
我尝试了以下使用 async.each 的建议,但我无法触发迭代完成回调,以告诉 nimble 的 .series 函数继续到下一个块。
async.each(User.friends, function(friend) {
request.get({
url: 'https://graph.facebook.com/me/mutualfriends/'+friend.id+'?access_token=' + User.accessToken,
json: true
}, function (error, response, body) { //NEED TO WAIT TIL THESE ARE ALL COMPLETED
if (!error && response.statusCode == 200) {
console.log("common friends",body.data);
} else {
console.log(error);
}
});
},function(err) {console.log('Final callback');callback();}); //THIS CALLBACK DOESN'T FIRE - NIMBLE JUST SITS AND WAITS
【问题讨论】:
-
考虑使用 Promise。
-
这有点简洁。 :)
标签: node.js asynchronous underscore.js each