2017-09-06 2 views
0

Ich versuche, eine truncate und Massenerstellung innerhalb einer Transaktion mit Sequelize auszuführen. Der BulkCreate wird jedoch nie ausgeführt. Mein Code hierfür ist wie folgt:Sequelize bulkCreate innerhalb einer Transaktion

  sequelize.transaction(function(t) { 
       return Item.destroy({ truncate: true, transaction: t }).then(() => { 
        return Item.bulkCreate(itemsArray, {transaction: t}) 
       }) 
      }).catch(function (err) { 
       logger.error('ERROR:' + err); 
      }); 

Die Protokolle hierfür sind wie folgt:

5:21:23 PM - info: Successfully connected to DB:XXX 
Executing (default): CREATE TABLE IF NOT EXISTS `items` (`barcode` 
VARCHAR(255) NOT NULL , `base` INTEGER, `original` INTEGER, `sale` INTEGER, 
`extraSale` INTEGER, `date` DATETIME, PRIMARY KEY (`barcode`)) ENGINE=InnoDB; 
Executing (default): SHOW INDEX FROM `items` 
Executing (83dc186e-dec7-4814-94fd-f05cebc0e48b): START TRANSACTION; 
Executing (83dc186e-dec7-4814-94fd-f05cebc0e48b): TRUNCATE `items` 
5:21:02 PM - info: here 
Executing (83dc186e-dec7-4814-94fd-f05cebc0e48b): COMMIT; 

Wenn ich die Funktion so ändern, dass ich schaffe es verwenden, wie erwartet funktioniert.

Wer irgendwelche Ideen, warum BulkCreate nicht funktioniert?

Antwort

0

Es stellt sich heraus, dass das oben genannte korrekt ist. Das Problem war, dass aufgrund der asynchronen Natur des Codes ich eine Bereinigungsfunktion hatte, die das Array für die nächste Iteration bereit machen würde. Diese Funktion wurde vor dem Bulk-Create ausgelöst und daher wurde das Create nicht ausgelöst, da das Elementarray leer war.

Aktualisierte Lösung ist unten.

  sequelize.transaction(function(t) { 
       return Item.destroy({ truncate: true, transaction: t }).then(() => { 
        return Item.bulkCreate(itemsArray, { transaction: t }).then(() => { 
         //Ensure we are cleaned-up ready for the next iteration 
         //Have to clean up here due to async callback 
         itemsArray = []; 
        }, err => { 
         logger.error('ERROR:' + err); 
        }) 
       }, err => { 
        logger.error('ERROR:' + err); 
       }) 
      }).catch(function (err) { 
       logger.error('ERROR:' + err); 
      }); 
Verwandte Themen