我发现自己遇到了遍历数组的问题,触发了每个项目的异步操作,这些项目使用我再次迭代的数组调用我的回调...当然在进入下一个项目之前,你需要等待以前完成。如果在处理项目时发生错误,则必须停止并退出所有封闭循环。
我为处理这些情况而编写的代码很容易编写但不易于阅读/维护。为了完整解决这个问题,我目前正在使用我编写的方法,如下所示:
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中进行迭代,以便它可以同时使用异步代码和经典同步代码?
P.S。:我确信有些用户会在使用async
模块时回答一些问题。我知道。我不喜欢我的代码在使用时的样子。与我目前的解决方案相比,它的可维护性更低。我需要更好的东西。
答案 0 :(得分:1)
有很多node.js flow control libraries用于处理异步操作。他们都有略微不同的方法和句法糖,但async
可能是最受欢迎的。我更喜欢Step
因为它的功率重量比。 :)
答案 1 :(得分:0)
如果我正确使用你的例子就是猫鼬用法。请参阅以下基于承诺的解决方案:Node.js deferred promisify + mongoose