JavaScript - 异步/等待等待承诺解决

时间:2017-11-05 13:49:36

标签: javascript mongoose async-await es6-promise bulk

我想使用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
    });

1 个答案:

答案 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
    });