Verspricht in Sequelize: wie man Ergebnisse aus den einzelnen Versprechen
In Sequelize >=1.7 wir können Versprechen
Können Sie erklären mir, wie bekomme ich Werte von jedem Benutzer in diesem code:
var User = sequelize.define("user", {
username: Sequelize.STRING
})
User
.sync({ force: true })
.then(function() { return User.create({ username: 'John' }) })
.then(function(john) { return User.create({ username: 'Jane' }) })
.then(function(jane) { return User.create({ username: 'Pete' }) })
.then(function(pete) {
console.log("we just created 3 users :)")
console.log("this is pete:")
console.log(pete.values)
//what i want:
console.log("this is jane:")
console.log(jane.values)
console.log("this is john:")
console.log(john.values)
})
UPD
Alle Werte müssen für set Assoziationen mit anderen Modell.
Eigentlich brauche ich etwas wie dieses-code:
User.hasMany(Group)
Group.hasMany(User)
User
.sync({ force: true })
.then(function() { return User.create({ username: 'John' }) })
.then(function(john) { return User.create({ username: 'Jane' }) })
.then(function(jane) { return User.create({ username: 'Pete' }) })
.then(function(pete) { return Group.findOrCreate({id: 1}) })
.then(function(group) {return group.setUsers([john, jane, pete])})
.then(function(result) { console.log(result)})
})
Ich habe noch nie gehört, sequelize, aber
Eigentlich
sync hat keinen Bezug auf die Verheißungen, die in dieser Instanz ist; es ist ein sequelize option, um die Kraft, die zur Erstellung der Tabelle.
sync({force:true})
nicht so Aussehen, wie Sie benötigen würde, asynchrone verspricht 🙂Eigentlich
sync({force:true})
kann entfernt werden, wenn diese Methode aufgerufen, beim Projekt starten, zum Beispielsync hat keinen Bezug auf die Verheißungen, die in dieser Instanz ist; es ist ein sequelize option, um die Kraft, die zur Erstellung der Tabelle.
InformationsquelleAutor dpolyakov | 2014-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bluebird Weise sind die Sammlung Hilfsfunktionen.
Wenn Sie möchten, erstellen Sie parallel verwenden
map
:Wenn Sie benötigen, erstellen Sie nacheinander, ändern Sie einfach es zu
mapSeries
(3.0+).Wenn das array muss nicht dynamisch sein, und Sie einfach wollen, eine gemeinsame Wertschöpfung durch die Verheißung Kette, wie in Ihrem Beispiel haben Sie einen Blick auf Wie erhalte ich Zugang zu früheren Versprechen, die Ergebnisse in eine .dann() Kette?.
.sync({ force: true })
löscht alle Tabellen in der aktuellen Datenbank. Seien Sie vorsichtig!Ich weiß nicht, sequelize. Sollte (kann) ich übergehe diese nennen?
überprüfen Sie die sync-Dokumentation: github.com/sequelize/sequelize/wiki/... Sie wahrscheinlich immer noch wollen, um zu synchronisieren, aber der force-option löscht die Tabellen jedes mal, wenn es aufgerufen wird. Wirklich Sie wollen mit Migrationen in der Produktion, aber ich habe nicht bekommen, zu diesem Punkt in meinem Studium 🙂
InformationsquelleAutor Bergi
Ohne zusätzliche Bibliotheken (und wenn Sie benötigen, zur Aufrechterhaltung der Ordnung schafft), Sie können dies tun, indem einfach variable(N) in den umschließenden scope, die halten die Werte:
Im Allgemeinen jedoch würde ich empfehlen, dass du dich in Richtung @Bergi die Antwort, die erstellt eine Liste von Versprechungen und wartet auf all die Versprechungen komplett.
Bearbeiten, basierend auf der Frage-update:
Mit den aktualisierten code-block und Gebäude auf @Bergi ' s Vorschlag
Promise.map
können Sie vermeiden Sie die Verwendung von Variablen in einem höheren Bereich mit so etwas wie die folgenden:Sie haben die
Promise.all
halbwegs richtig 🙂users
hat bereits die ArtPromise<[User]>
,group
hat der TypPromise<Group>
und jetzt wollen wirPromise<(Group, [User])>
- die Wartezeiten für Sie sowohl alle Benutzer erstellt werden und die Gruppe zu finden...Ich Lesen Sie die Dokumentation für
Promise.spread
und festgestellt, dass es garantiert, dass ein AufrufPromise.all
. Das ist, warum glaubte ich nicht brauchen diePromise.all
wickeln Sie das zurückgegebene array. Ich konnte nicht finden die Dokumentation fürPromise.map
so wusste ich nicht, dass es mir geben würde, einePromise<[User]>
statt[Promise<User>]
. Das ist der Grund, warum mein Kommentar Bestand über die Notwendigkeit derPromise.all
einwickeln der Benutzer-array. Ich vergaß, zu überprüfen, obPromise.all
würde recurse in ein array, es fand (wie in[<Promise<x>|[Promise<y>]>]
).InformationsquelleAutor squid314
Versuchen, diese...
InformationsquelleAutor Anthony Chu