मैं वादे का वादा करने की कोशिश कर रहा हूं ताकि एक वादा खारिज कर दिया गया हो तो श्रृंखला टूट जाएगी। मैंने previous SO question की लीडों का पालन किया और इसे देशी वादों पर लागू करने की कोशिश की, लेकिन मुझे लगता है कि मैं काम करने के तरीके को गलत समझ रहा हूं।एक स्वच्छ तरीके से जावास्क्रिप्ट वादा श्रृंखला तोड़ें
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) देता है, तो अगले में फ़ंक्शन निष्पादित नहीं किया जाना चाहिए, और चूंकि अंत में कोई पकड़ नहीं है, इसलिए चरण 2 के अस्वीकार किए गए वादे को लगता है - जैसा कि अपेक्षित है - इसे तब तक अग्रेषित किया जाना चाहिए जब तक यह निकल न जाए श्रृंखला क्योंकि इसे कोई हैंडलर नहीं मिला।
मुझे यहां क्या याद आ रही है? https://jsfiddle.net/6p4t9xyk/