Ich habe den folgenden Code in Knoten v6.3.0 läuft auf einem API, das zwei separate Versprechungen abhängig von einer Bedingung, ob ein Param existiert in der POST-Anfrage läuft.DRY up Versprechen in Javascript
if (paramExists) {
// call database with this query
User.filter(/* do something with param */)
.then(function (user) {
Data.filter(/* same in both conditions */)
.then(function (data) {
// join data and user
res.send(joinedData);
}) // omit catch for clarity
}) // omit catch for clarity
} else {
// call database with this query
User.filter(/* do something with header */)
.then(function (user) {
Data.filter(/* same in both conditions */)
.then(function (data) {
// join data and user
res.send(joinedData);
}) // omit catch for clarity
}) // omit catch for clarity
}
Ich bin sicher, dass es eine Möglichkeit, diesen Code zu vertrocknen ist, so dass das erste Versprechen in beiden Bedingungen die Benutzer auf das zweite Versprechen geht, aber ich kann nicht herausfinden, wie. Soll ich einen Generator benutzen oder gibt es eine Möglichkeit, dies mit Versprechen zu tun, die ich nicht bekomme?
Haben Sie "Promise.all" in Betracht gezogen? Am Ende sieht es so aus: var p1 = Benutzer.filter (paramExists? Args1: args2), p2 = Data.filter (...); Promise.all ([p1, p2]). Dann (function (user, data) {...}); ' – numbers1311407
Klingt so, als würdest du nach [Bedingungen in Versprechensketten] fragen (http://stackoverflow.com/ q/26599798/1048572)? – Bergi