/ / परिणामी जंजीर वादे क्यों हल किए जाते हैं? - जावास्क्रिप्ट, नोड। जेएस, वादा, ब्लूबर्ड

परिणामी जंजीर वादों का समाधान क्यों किया जाता है? - जावास्क्रिप्ट, node.js, वादा, ब्लूबर्ड

मैं अपना सिर प्रॉमिस / ए + के आसपास लाने की कोशिश कर रहा हूं और मैं एक-दो बिंदुओं पर उलझन में हूं। इस पर विचार करो:

function foo() {
console.log("In "foo" function: --> which returns a Promise");
return new Promise(function (resolve, reject) {
resolve()
});
}

var promise1 = foo();

var promise2 = promise1.then(function () {
console.log("Promise 1 has been resolved --> onFulfilled() returns a value");
return 1;
});

var promise3 = promise2.then(function () {
console.log("Promise 2 has been resolved --> onFulfilled() is not returning anything from inFulfilled()");
});

var promise4 = promise3.then(function () {
console.log("Promise 3 has been resolved");
});

/* Console:
In "foo" function: --> which returns a Promise
Promise 1 has been resolved --> onFulfilled() returns a value
Promise 2 has been resolved --> onFulfilled() is not returning anything from inFulfilled()
Promise 3 has been resolved
*/
  • वादा 1 को कॉल करके स्पष्ट रूप से हल किया जाना है resolve(), अन्यथा निष्पादन रुक जाता है। ऐसा क्यों है कि वादे 2 और 3 के साथ, निष्पादन इन सुलझे हुए (बिना आवश्यकता के) विचार करता है resolve()) और अगले करने के लिए प्रगति .then श्रृंखला में?
  • "OnFullfilled ()" फ़ंक्शन को वादा 2 तक जंजीर दिया गया है, एक मूल्य वापस नहीं करता है। मुझे कोई स्पष्ट नहीं मिल रहा है संदर्भ इस मामले में क्या होने वाला है, इस कल्पना में। क्या यह परिदृश्य ऐसा माना जाता है जैसे कि फ़ंक्शन वापस आ गया है अपरिभाषित? क्या यह पुस्तकालय के वास्तविक कार्यान्वयन के लिए उपयोग किया जाता है?

उत्तर:

जवाब के लिए 3 № 1

प्रॉमिस हैंडलर (सफलता या त्रुटि हैंडलर) का रिटर्न मान होता है। प्रत्येक कॉल के बाद एक नया वादा करता है।

यदि कोई मान लौटाया जाता है, तो वादा हैस्वतः समाधान हुआ। यदि एक और वादा वापस किया जाता है, तो वादा तब तक इंतजार करेगा जब तक कि इसे हल नहीं किया जाता है या अगले जारी रखने से पहले खारिज कर दिया जाता है, फिर वादा श्रृंखला में कॉल करें।

मुझे लगता है कि यह आपके द्वारा देखे गए व्यवहार की व्याख्या करता है।


जवाब के लिए 0 № 2

व्यवहार आप के लिए देख रहे हैं यहाँ # 7 है (https://github.com/promises-aplus/promises-spec#the-then-method) वादा / ए + कल्पना में।

promise2 = promise1.then(onFulfilled, onRejected);

"यदि या तो ऑनफ़िल्ड या ऑनराइड अस्वीकृत मान लौटाता है, तो प्रॉमिस रिज़ॉल्यूशन प्रोसीजर [[रिज़ॉल्यूशन]] (वादा 2, एक्स) चलाएं।"

इससे जो मैं निकालता हूं वह यह है कि जब पहला वादा विफल / हल हो जाता है, तो उसमें से कोई भी वादा (नए वादे सहित) किया जाता है promise2), विफल / हल है।

उदाहरण के लिए: जब आप संकल्प करें promise1 आपके उदाहरण में, बाद के सभी वादे भी हल हो गए।