我发现自己遇到了遍历数组的问题,为每个调用我的回调的项目触发异步操作,而我正在再次迭代的数组......当然,在进入下一个项目之前,你需要等待上一个结束。如果在处理项目时发生错误,您必须停止并退出所有封闭循环。
我为处理这些情况而编写的代码很容易编写,但不容易阅读/维护。为了这个问题的完整性,我目前正在使用我编写的方法,如下所示:
iterate(items, item_callback, ended_callback);
item_callback 如下所示:
function(item, next_item, stop) {
//do your stuff with `item` here...
//return next_item() to go forward
//return stop() to break
}
我想知道也许我错过了在 node.js 中进行迭代的更好技术。
示例时间:
User.find(function(err, users) {
//iterate through users: how?
//first attempt: for
for(var i in users) {
//simple stuff works here... but if I call something async... what do I do?
//like iterating through friends
User.find({friend:users[i]._id}, function(err, friends) {
if(err) {
//handle error: how is best to do this?
}
//this might end after the next user is selected... and might break things
});
}
});
TL;DR:如何在 node.js 中进行迭代,以便它同时适用于异步代码和经典同步代码?
PS:我相信有些用户会在使用async
模块时回答一些问题。我知道。我不喜欢我的代码在使用时的样子。它甚至比我当前的解决方案更难维护。我需要更好的东西。