【发布时间】:2017-11-29 10:44:41
【问题描述】:
目前我在尝试使用 nodejs 驱动程序在 mongodb 中执行一些条目时面临回调地狱。只有在插入所有记录(在数组中)时才应该执行某些任务。 我查看了async.each method 但主要问题是如果遇到错误,它将调用回调。因此不会处理集合中的其余项目。
那么用 async.js 处理这类问题的正确方法是什么?
PS:请举个例子会很有帮助,因为我刚开始使用 async.js,而且很少(如果有的话)使用这个 API 批量插入到 mongodb 的例子。
【问题讨论】:
-
异步是一种糟糕/过时的方法。您应该改用 Promise。插入相同类型的多条记录的最佳方法是通过单个多行插入。这是 PostgreSQL 的示例:stackoverflow.com/questions/37300997/…。您需要为 mongodb 找到相同的内容。
-
@vitaly-t 我认为这只是一种意见。谷歌搜索回调地狱会产生 asyncjs 作为一种非常流行的解决方案。目前我更喜欢使用 async.js
-
@rahulserver 因此,如果您有 10 次插入要做,并且在迭代 #6 时出现错误,应该发生什么?删除前一个元素(#1 到 #5)?继续下一个(#7 到 #10)?还是停在这里(#6到#10没有插入)但是不运行final函数中的代码()?
-
@DanieleTassone 最好将结果收集到 #6 失败的数组中,然后继续下一个
-
我通常使用 Promise 来避免导致应用程序运行异常的“崩溃”场景。我的建议是在 Async 函数中使用基于 Promise 的方法或 Try/Catch(我个人不喜欢 Try/Catch)。对于异步内部使用的 MongoDB,我通常在 OrderedBulk 中批量处理所有插入/更新。然后我在异步流程结束时提交。我不知道这是否是您想要的回复类型。如果是这样,我可以给你一个完整的回复。
标签: javascript node.js mongodb asynchronous async.js