Dies ist im Grunde mein Code, mit q:Aufruf Versprechen in einem anderen Versprechen, bedingt
let d = Q.defer();
let result = {
name: 'peter'
};
d.resolve(result);
return d.promise;
aber ich muss jetzt einen Schritt ausführen auf einer bestimmten Bedingung basiert. Dieser Schritt ruft ein anderes Objekt auf, das ebenfalls eine Zusage zurückgibt. Ich habe also Versprechungen verschachtelt, wenn das der richtige Ausdruck ist.
Etwas wie folgt aus:
let d = Q.defer();
let result = {
name: 'peter'
};
if (someParameter) {
otherService.getValue() // Let's say it returns 'mary'
.then((res) => {
result.name = res;
});
}
d.resolve(result);
return d.promise;
Dies jedoch nicht funktioniert (die name
Eigenschaft ist immer noch 'Peter'). Wahrscheinlich aufgrund der Tatsache, dass mein inneres Versprechen zu einem späteren Zeitpunkt gelöst wird?
Ich habe das auch versucht, aber es funktioniert nicht, wenn ich den anderenService, der ein Versprechen zurückgibt, aufrufen. Es funktioniert, wenn ich den Wert gerade eingestellt:
let d = Q.defer();
let result = {
name: 'peter'
};
d.resolve(result);
return d.promise
.then((data) => {
if (someParameter) {
// Works
data.name = 'john';
// Doesn't work
otherService.getValue()
.then((res) => {
data.name = res;
});
}
return data;
});
Hier wird der Name ‚John‘, nicht ‚Mary‘ sein.
Klar bin ich Versprechungen verkennen, aber ich kann nicht meinen Kopf darum wickeln.
Werfen Sie einen Blick auf [if-else-Fluss in Versprechen] (http://stackoverflow.com/q/26599798/1048572) – Bergi