我正在尝试遍历数组并为每个iteratee创建记录。这就是我在另一个问题中提到的内容:

async.each(data, (datum, callback) => {
  console.log('Iterated')

  Datum.create({
    row: datum,
  }).exec((error) => {
    if (error) return res.serverError(error)
    console.log('Created')
    callback()
  })
})

不幸的是,这导致:
Iterated
Iterated
Iterated
Created
Created
Created

不是这个想要的:
Iterated
Created
Iterated
Created
Iterated
Created

我做错了什么?

最佳答案

async.eachSeries()将一次运行一次迭代,并等待每个迭代终止,然后再继续下一步。



听起来这是瓶颈。我不喜欢连续运行异步代码,因为这通常会使进程变慢。这种方法怎么样:

  • 由于有了data,您知道需要多少个标识符。
  • 在后端实现一个函数,该函数一次不创建单个标识符,而是n这样的标识符(包括必要的增量等),然后将该Array返回到前端。现在,您可以使用该预先计算的ID数组/将其映射到数据数组,从而在paralell中运行常规请求。

  • 这样可以将运行时间从(createAnId + request) * data.length大大减少到单个迭代的运行时间。由于所有这些请求都可以并行运行,因此大部分重叠。

    09-12 07:04