我有他們創建團隊的用戶資料庫。和其他用于存盤賽車手的檔案。
每個用戶可以創建一個由 6 名賽車手組成的團隊。
但問題是我有 50k 用戶并使用下面的代碼從他們的團隊中洗掉一名賽車手,如果管理員從賽車手檔案中洗掉了它。
我正在使用 express.js 和貓鼬
team 是一個物件陣列,其中包含賽車手名稱、短代碼和唯一識別符號。
async function delete(req, body){
// code to validate users input
await Users.updateMany({'tema.shortCode': 'HAM'}, { $pull: {'team.shortCode': 'HAM'}})
}
我已經看到如果我洗掉 await 關鍵字,回應時間會減少。但是否建議這樣做。
uj5u.com熱心網友回復:
不,您不應該洗掉await. 洗掉await意味著如果Users.updateMany呼叫拒絕,錯誤將無法輕松處理,因為它將成為未處理的承諾拒絕。
const fail = async message => Promise.reject(message)
const usingAwait = async () => {
await fail('using await')
}
const noAwait = async () => {
fail('no await')
}
const handleError = error => console.log('Handled error:', error)
;(async () => {
await usingAwait().catch(handleError) // logs Handled error: using await
await noAwait().catch(handleError) // doesn't log anything!
})()
typescript-eslint 規則@typescript-eslint/no-floating-promises對此有更多詳細資訊:
未處理的 Promise 可能會導致一些問題,例如不正確的操作順序、被忽略的 Promise 拒絕等等。處理 Promise-valued 陳述句的有效方法包括
awaiting、return 以及.then()使用兩個引數或.catch()一個引數呼叫。
加快速度的方法是使用類似的東西,Promise.all如果你正在做多個delete不依賴于彼此結果的 s:
const reqs = [[req1, body1], /* ... */]
await Promise.all(reqs.map(async ([req, body]) => delete(req, body))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438876.html
標籤:javascript 打字稿 mongodb 表现 异步等待
