2017-11-05 3 views
0

Ich möchte Mongoose Bulk-Operation für Upserting-Transaktionen verwenden. Für jede meiner Transaktionen möchte ich sie in einer Schleife verarbeiten und innerhalb dieser Schleife muss ich ein Versprechen verwenden. Nachdem dieses Versprechen aufgelöst wurde, möchte ich das Upsert zum Bulk hinzufügen.JavaScript - async/warten nicht auf das Versprechen zu lösen

Mein Problem hier ist, dass, obwohl ich await für jedes Versprechen zu beenden, die Masse am Ende der Funktion ausgeführt wird, bevor eine der Versprechen gelöst ist. Was mache ich falsch oder wie kann ich das beheben?

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

Was ist 'transactions.forEach'? Wie behandelt es Versprechen, die durch seinen Rückruf zurückgegeben werden? – Bergi

+0

Transaktionen sind nur ein Array von Transaktionsobjekten. Ich traverse das Array mit '' 'forEach''' – phoebus

+0

Nun, das ist ein Problem :-) – Bergi

Antwort

-1

Soweit ich weiß, wenn await verwenden, die Sie nicht mehr verwenden, um die then Rückgabewert:

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 
    }); 
+0

Wahr, aber nicht notwendig problematisch. Und das löst das Problem nicht – Bergi

Verwandte Themen