看起来像猫鼬查询的Promise.all()就像花费时间顺序等待一样

时间:2019-03-26 08:58:38

标签: javascript node.js mongoose

在猫鼬查询中,我被困在Promise.allawait上。

我尝试在async/awaitPromise.all之间进行基准测试,而我的两个代码都花费相同的时间。

我提供了一些代码。在第一部分中,我尝试使用promise.all,在最后一部分中尝试使用await,这就是结果

sep: 2890.802ms
sep-await: 2409.150ms
console.time('sep')
  const [New, CreatingQuotation, CreatingInvoiceCoverage, CarChecking, Completed, Cancelled] = await Promise.all([
    this.where('State', 'new').countDocuments().exec(),
    this.where('State', 'creating_quotation').countDocuments().exec(),
    this.where('State', 'creation_invoice_coverage').countDocuments().exec(),
    this.where('State', 'car_checking').countDocuments().exec(),
    this.where('State', 'completed').countDocuments().exec(),
    this.where('State', 'cancelled').countDocuments().exec(),
  ])
  console.timeEnd('sep')


  console.time('sep-await')
  const NewX = await this.where('State', 'new').countDocuments().exec()
  const CreatingQuotationX = await this.where('State', 'creating_quotation').countDocuments().exec()
  const CreatingInvoiceCoverageX = await this.where('State', 'creation_invoice_coverage').countDocuments().exec()
  const CarCheckingX = await this.where('State', 'car_checking').countDocuments().exec()
  const CompletedX = await this.where('State', 'completed').countDocuments().exec()
  const CancelledX = await this.where('State', 'cancelled').countDocuments().exec()
  console.timeEnd('sep-await')

我认为Promise.all应该比await快5倍。请讨论原因。

1 个答案:

答案 0 :(得分:1)

您对Promise.allasync/await的理解是正确的。

后台发生了一些事情,也许this.where最终以某种队列结束,并且组件逻辑始终只一个一个地执行。

您是否还可以包含更多代码,以便我们可以看到实际的this上下文?


或者,MongoDB被100%上的每个查询完全占用,因此一次转换所有这些甚至会变得更糟,因为它必须在所有查询之间进行交换。