Ошибка «Заданный номер транзакции * не совпадает» в mongodb и nodejs

#javascript #node.js #mongodb #acid

Вопрос:

Я хочу изменить две схемы при добавлении данных. Для этого я использовал транзакцию ACID mongodb с nodejs следующим образом. Но, когда я запускаю программу, она отображает ошибку, как

 (node:171072) UnhandledPromiseRejectionWarning: MongoError: Given transaction number 3 does not match any in-progress transactions. The active transaction number is 2
    at MessageStream.messageHandler (/home/user/Projects/project/node_modules/mongodb/lib/cmap/connection.js:272:20)
    at MessageStream.emit (events.js:375:28)
    at MessageStream.emit (domain.js:470:12)
 
 addData = async(request: Request, response: Response) => {
   const session = await stockSchema.startSession()
   try {
       const userData = request.body
       let data = {}

       const transaction = await session.withTransaction(async() => {
           try {
               userData.products.map(async(item: any) => {
                   await inventorySchema.findOneAndUpdate({ _id: item.materialID }, { $inc: {qty: -item.qty }}, { session });
                }); 
                data = new stockSchema(userData);
                await data.save({ session });  
           } catch (error) {
               await session.abortTransaction()
               throw new Error("Could not create data. Try again.");
           }
       });
       if (transaction) {
           session.endSession()
           return returnData(response, data, 'Data created successfully.');
       } else {
           throw new Error("Could not create data. Try again.");
       }
   } catch (error: any) {
       session.endSession();
       return Error(response, error.message, {});
   }
}
 

Комментарии:

1. Поддерживает ли withTransaction теперь вызов с такой асинхронностью?