admin管理员组文章数量:1332896
I want to utilize mongoose's withTransaction
helper particularly for its ability to automatically retry transient transaction errors. However, it seems that the withTransaction
helper is incapable of returning data, which is a problem for me.
I have code that looks like:
import { startSession } from 'mongoose';
async addItem(itemData) {
const session = await startSession();
session.startTransaction();
try {
const item = await new Item({ itemData }).save({ session });
// a bunch of other async operations...
await sessionmitTransaction();
session.endSession();
return item;
} catch (error) {
await session.abortTransaction();
session.endSession();
throw error;
}
}
How can I either (1) use the withTransaction
helper but still have this function returning the item
as it currently does, or (2) make this function automatically retry on transient transaction errors through some way other than using withTransaction
.
I want to utilize mongoose's withTransaction
helper particularly for its ability to automatically retry transient transaction errors. However, it seems that the withTransaction
helper is incapable of returning data, which is a problem for me.
I have code that looks like:
import { startSession } from 'mongoose';
async addItem(itemData) {
const session = await startSession();
session.startTransaction();
try {
const item = await new Item({ itemData }).save({ session });
// a bunch of other async operations...
await session.mitTransaction();
session.endSession();
return item;
} catch (error) {
await session.abortTransaction();
session.endSession();
throw error;
}
}
How can I either (1) use the withTransaction
helper but still have this function returning the item
as it currently does, or (2) make this function automatically retry on transient transaction errors through some way other than using withTransaction
.
2 Answers
Reset to default 7This appears to be a known issue in the node driver. Some workarounds are provided in that ticket.
I wrote a simple helper that internally uses withTransaction
to solve the problem and make transactions less verbose with mongoose.
After installing mongoose-trx you can simply do:
const transaction = require('mongoose-trx');
const [customer] = await transaction(session => Customer.create([{ name: 'Test' }], { session }));
// do whatever you need to do with the customer then return it
It supports transaction options as well, see the documentation on how to do it.
本文标签: javascriptMongoose return value from withTransaction callbackStack Overflow
版权声明:本文标题:javascript - Mongoose return value from withTransaction callback - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742305005a2449738.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论