我想使用Mongoose的批量操作来进行事务处理。对于我的每个事务,我想在循环中处理它们,并且在该循环中我需要使用promise。在该承诺解决后,我想将upsert添加到批量中。
我的问题在于,尽管我await
完成了每个承诺,但在解决任何承诺之前,会在函数结束时执行批量处理。我做错了什么或如何解决这个问题?
const bulkTransactions = Transaction.collection.initializeUnorderedBulkOp();
transactions.forEach( async (transaction: any) => {
// do some suff, fill transaction_data
await Utils.processTransactionType(transaction).then((action: any) => {
if (action) {
// do other stuff
}
bulkTransactions.find({_id: hash}).upsert().replaceOne(transaction_data);
}).catch((err: Error) => {
// log error
});
});
await bulkTransactions.execute().catch((err: Error) => {
// log error
});
答案 0 :(得分:-1)
据我所知,在使用await
时,您不再使用then
返回值:
const bulkTransactions = Transaction.collection.initializeUnorderedBulkOp();
transactions.forEach( async (transaction: any) => {
// do some suff, fill transaction_data
let action = await Utils.processTransactionType(transaction);
if (action) {
// do other stuff
}
bulkTransactions.find({_id: hash}).upsert().replaceOne(transaction_data);
});
await bulkTransactions.execute().catch((err: Error) => {
// log error
});