Ich möchte 3 Versprechen miteinander verketten, aber es gibt etwas Verhalten, das ich über die resolve
und reject
Funktionalität nicht herausfinden kann. Ich habe meinen Code vereinfacht, um die Frage zu stellen:Verkettung Versprechen in nativem Javascript
function testP(num) {
return new Promise((resolve, reject) => {
console.log('Do Work', num);
reject(num);
});
}
function testPromises() {
return new Promise((resolve, reject) => {
testP(1)
.then(testP(2))
.then(testP(3))
.then(resolve)
.catch(reject);
});
};
const theTest = testPromises().then(()=>{
console.log("all done");
}).catch(err => {
console.log("ERR", err);
});
Und was ich in meiner Ausgabe zu sehen ist:
Do Work 1
Do Work 2
Do Work 3
ERR 1
Warum wird der Code erhalten zu Do Work 2
und Do Work 3
wenn die ersten Versprechen Treffer reject
sofort? Mein Verständnis war, dass die then
Funktionen warten auf das Versprechen zu resolve
oder reject
vor der Ausführung.
BTW 'return new Promise ((resolve, ablehnen) => {smth () .dann (smth2) .dann (auflösen) .catch (ablehnen); }) 'ist Antipattern. Es ist viel besser, 'return smth(). Then (smth2);'. –