【发布时间】:2018-04-17 18:04:15
【问题描述】:
我想使用 Mongoose 的批量操作来更新事务。对于我的每笔交易,我想在一个循环中处理它们,并且在那个循环中我需要使用一个承诺。在该承诺解决后,我想将 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
});
【问题讨论】:
-
什么是
transactions.forEach?它如何处理其回调返回的承诺? -
transactions 只是一个交易对象数组。我用
forEach遍历数组 -
那是个问题:-)
标签: javascript mongoose async-await es6-promise bulk