Die Verwendung von Schleifen und verspricht in Transaktionen in Sequelize
Ich bin derzeit am Aufbau eines Nodejs, Express, Sequelize (w. PostgreSQL) app, und haben, laufen Sie in ein paar Probleme mit mit verspricht zusammen mit den Transaktionen und Schleifen.
Ich versuche herauszufinden, wie Sie mit der for-Schleifen in einer Transaktion. Ich versuche eine Schleife durch eine Liste der Mitglieder und erstellen Sie einen neuen Benutzer in der Datenbank für jeden von Ihnen.
Ich weiß, der folgende code ist falsch, aber es zeigt, was ich zu tun versuche.
Kann jemand mich in die richtige Richtung?
var members = req.body.members;
models.sequelize.transaction(function (t) {
for (var i = 0; i < members.length; i++) {
return models.User.create({'firstname':members[i], 'email':members[i], 'pending':true}, {transaction: t}).then(function(user) {
return user.addInvitations([group], {transaction: t}).then(function(){}).catch(function(err){return next(err);});
})
};
}).then(function (result) {
console.log("YAY");
}).catch(function (err) {
console.log("NO!!!");
return next(err);
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie eine
Promise.all
Ich glaube nicht, dass Sie brauchen, um
catch
innerhalb sequelize Transaktionen, wie ich denke, es springt in den catch auf die TransaktionSorry für die Formatierung. Auf mobile.
Versprechen.alle warten darauf, dass alle Versprechungen zur Rückkehr (oder nicht) vor dem ausführen des .dann, und das
.then
callback werden alle Versprechen, Daten von jedem arrayMüssen Sie mit der eingebauten Schleifen-Konstrukten von bluebird, die Schiffe mit sequelize:
.nodeify(err);
zu funktionieren aber. Es sagt err nicht definiert. Nicht benutzt haben nodeify vor, also ich bin wahrscheinlich etwas fehlt.Je nach Implementierung der Node.js dies kann helfen. Ich habe das gleiche setup mit express, POSTGRES und sequelize.
Persönlich würde ich es vorziehen, die async/await (ES6) Umsetzung und dann/fangen, da es leichter zu Lesen ist. Auch die Erstellung einer Funktion, die aufgerufen werden können, extern verbessert die Wiederverwendbarkeit.
Erste: https://caolan.github.io/async/docs.html
So leicht: