【发布时间】:2018-07-08 10:19:16
【问题描述】:
我想在我的部分代码中做一个同步循环。 函数 saveInDatabase 检查数据库中是否已存在项目标题(字符串)。这就是为什么它不能并行解决,否则条件永远不会适用(并且会产生重复)。
Promise.all(arr.map(item => {
saveInDatabase(item).then((myResult) => ... );
}));
我尝试将这个函数封装到单独的promise中,也尝试使用npm包(synchronous.js,sync),但它似乎不适合我的代码。
也许这个解决方案完全是愚蠢的。 您认为将 promise.all 替换为同步循环(例如 foreach)是一个更好的主意吗?问题是我需要每次迭代的结果...
我使用的是节点 6.11.2。你能给我一些处理这个问题的技巧吗? 先感谢您。
【问题讨论】:
-
Promise.all 可能是这里工作的错误工具。您需要一次运行一个,用 .then 链表示比传递给 promise.all 的数组更好。如果你有一个数组,
[].reduce可以为你设置该链 -
let looper = (current, max) => { saveInDatabase(arr[current]).then( r => { looper(current + 1, max) }) }; looper(0, arr.length);只是给你一个想法,你知道...... Promise.all 在概念上对我来说无论如何都是错误的(在这种情况下) -
synchronous loop异步代码永远不是解决方案。 Promise.all 不一定是错误的,如果你想在最后一次迭代完成后访问所有结果。事实上,您使用.map而没有从.map回调中返回任何内容,这意味着您已经在使用.map,就好像它是.forEach一样!
标签: javascript node.js mongoose promise