防止由于Promise解析导致的过载

时间:2017-09-25 17:21:51

标签: javascript node.js express mongoose bluebird

我需要使用mongoose执行大量findOneAndUpdate()操作,因为无法批量执行原子操作。因此,我在for循环中创建一个promise数组,之后将解析它。不幸的是,这需要大约2-3秒,在此期间我的Express应用程序无法处理任何新请求。

代码:

const promiseArray = []
for (let i = 0; i < 1500; i++) {
  const p = PlayerProfile.findOneAndUpdate(filter, updateDoc)
  promiseArray.push(p)
}
return Promise.all(promiseArray).then((values) => {
  // Process the values
})

问题:

我如何避免我的Express应用程序在解决此承诺时对新请求完全没有响应?

更多背景信息:

我正在尝试使用原子操作更新并返回许多文档,因此是大循环。它基本上是选择一个文档并为此文档设置锁定。

1 个答案:

答案 0 :(得分:0)

尝试将更新选项一起使用:

PlayerProfile.update(filter, updateDoc, { multi: true }, function(err, result) {
  // Do something
})

签名是:

Model.update(conditions, update, options, callback)