私は、約束が拒否された場合にチェーンが壊れるように約束を連鎖しようとしています。私はprevious SO questionのリードに続き、本来の約束にそれを適用しようとしましたが、私は物事の仕方を誤解していると思います。きれいな方法でjavascript promise chainを破る
Promise.resolve()
.then(function() {
return step(1)
.then(null, function() {
stepError(1);
});
})
.then(function() {
return step(2)
.then(null, function() {
stepError(2);
});
})
.then(function() {
return step(3)
.then(null, function() {
stepError(3);
});
});
function step(n) {
console.log('Step '+n);
return (n === 2) ? Promise.reject(n) : Promise.resolve(n);
}
function stepError(n) {
console.log('Error '+n);
return Promise.reject(n);
}
上記のコードの出力は次のとおりです:私の理解で
Step 1
Step 2
Error 2
Step 3
[UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): 2]
、ステップ2は、チェーンを破る必要がありますし、ステップ3はいけない。ここ
は、私は、コードを書き換えてきた方法です実行される。ステップ(2)が拒否された約束を返すと、stepError(2)が期待通りに実行されます。しかしPromise.reject(2)を返すので、次の関数は実行されてはならず、最後にcatchがないので、ステップ2の拒否された約束は、期待通りに、それはハンドラが見つからなかったからです。
私はここで何が欠けていますか?ここで
はと遊ぶのがJSFiddleです:私の理解ではhttps://jsfiddle.net/6p4t9xyk/