在使用貓鼬時,我有以下兩個異步操作
const user = await userModel.findOneAndDelete(filter, options);
await anotherAsyncFunctionToDeleteSomething(user); // not a database operation
但我需要確保兩個洗掉同時發生或拒絕。trycatch如果發現任何錯誤(在catch塊中) ,我考慮過使用第二個函式并重新創建用戶檔案。然而,這似乎不是一個有效的(或至少是吸引人的)解決方案。
uj5u.com熱心網友回復:
如果第二次手術完全不相關,那么您無能為力。您可以稍后確保這兩個記錄是否都非常必要。您可以使用 Promise.all() 同時運行兩個 Promise,但如果其中一個失敗,它會拋出錯誤,因此您可以重試它。但是正如您所提到的,您需要在運行第二個操作之前獲得第一個操作的結果,然后您必須單獨運行這些操作。
是的,您可以捕獲第二個承諾中拋出的任何錯誤并重新創建具有相同 ID 的檔案,如下所示:
const user = await userModel.findOneAndDelete(filter, options);
try {
await anotherAsyncFunctionToDeleteSomething(user);
} catch (e) {
console.log(e)
await collection.insertOne({ _id: new ObjectId("62....54"), ...otherData });
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505660.html
