在猫鼬查询中,我被困在Promise.all
和await
上。
我尝试在async/await
和Promise.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倍。请讨论原因。
答案 0 :(得分:1)
您对Promise.all
和async/await
的理解是正确的。
后台发生了一些事情,也许this.where
最终以某种队列结束,并且组件逻辑始终只一个一个地执行。
您是否还可以包含更多代码,以便我们可以看到实际的this
上下文?
或者,MongoDB被100%上的每个查询完全占用,因此一次转换所有这些甚至会变得更糟,因为它必须在所有查询之间进行交换。