我知道Model.create(documentsArray)
還有Model.bulkSave(documentsArray)
mongoose API。
我只是在嘗試Promise.all
以下方式-
const promises = []
for(let i=1; i ; i<1000) {
const promise = new UserModel({userId: Math.random() * 1000}).save()
promises.push(promise)
}
console.time('t1')
await Promise.all(promises)
console.timeEnd('t1') // takes about 329.189ms
如果我將插入邏輯替換為 -
console.time('t2')
for(const promise of promises) {
await promise
}
console.timeEnd('t2') // takes about 335.268ms
如上所述,兩者t1
幾乎t2
相同!如果我理解正確,為什么Promise.all
不一次將所有保存請求發送到資料庫。我在這里想念什么?
注意:以上兩個塊都是為了
uj5u.com熱心網友回復:
想象一下從亞馬遜訂購 3 個包裹。您的訂單類似于您可以等待的“承諾”。
你正在考慮的Promise.all(promises)
vsfor (p of promises) await p;
可以適應這個類比。
Promise.all 就像在說“等到我所有的包裹都到了”。他們到達的順序無關緊要,但是當最后一個包裹到達時,您的等待就結束了——在這種情況下,當您擁有所有 3 個包裹時。
for-await 就像單獨等待他們:“等到我的耳機到了,然后等到我的枕頭到了,再等到我的開罐器到了。” 在這種情況下,如果開罐器先到,那么您大部分時間都在等待耳機,而到了等待開罐器的時候,它可能已經到了,也可能還有一點時間等待它。事實上,它可能在耳機之前就已經到貨了,只是你當時并沒有明確地等待那個特定的包裹。它很可能已經坐在你的門廊上了。如果開罐器是延期交貨但耳機第二天就到了,那么您將花費大部分時間等待開罐器,而耳機和枕頭可能早就到了。你不是
所以總持續時間是最長的交貨需要多長時間才能到達。
請務必注意,您等待交貨的順序與交貨需要多長時間無關。 您無法通過調整您希望下一個到達的包裹的順序來讓您的亞馬遜訂單更快或更慢地到達。您可以一廂情愿地坐在前門等待耳機,實際上忽略了送貨員是否以及何時掉落您的枕頭或開罐器。您所希望的不會影響首先到達的包裹或需要多長時間。
Promise.all可以通過您的 for-await 回圈在內部正確實作。因此,它們花費相同的時間也就不足為奇了。
或者考慮在同一天懷孕并訂購披薩。這將需要大約九個月的時間,直到您可以說兩者都已交付。如果你先等寶寶,你的披薩會……很冷,僅此而已。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470273.html
標籤:节点.js 猫鼬 异步等待 承诺 异步-javascript