मुझे लगता है कि यह कहना आम है कि वादा हल हो गया है या बस गया है। वादे का संकल्प वह प्रक्रिया है जिसमें वादा pending
राज्य से चलता है और कहा गया राज्य से संबंधित मूल्य प्राप्त करता है। इसलिए, यदि कोई वादा fulfilled
या rejected
है तो यह एक हल किया गया वादा होगा (क्योंकि यह संकल्प प्रक्रिया समाप्त हो गई है)। यदि कोई वादा संकल्प प्रक्रिया में प्रवेश करता है और कभी भी किसी अन्य राज्य में संक्रमण नहीं करता है तो यह कहा जाता है कि वादा अनसुलझा है (संकल्प प्रक्रिया कभी खत्म नहीं हुई)।
अन्य शर्तों के बारे में rejected
या fulfilled
, वे अन्य दो राज्य हैं जिनमें pending
वादा से संक्रमण हो सकता है। reject
बहुत स्पष्ट आईएमओ है, यह उन मामलों को संभालता है जिनमें विफलता होने वाली है। अब मैं सहमत हूं कि fulfill
कुछ हद तक संदिग्ध हो सकता है क्योंकि इसका मतलब यह हो सकता है कि वादा सफलतापूर्वक पूरा हो गया है (जैसा कि हल किया जा रहा है)। यह संकल्प प्रक्रिया का वर्णन नहीं करना चाहिए बल्कि काम की सफलता (या त्रुटि की अनुपस्थिति) हाथ में है।
संकल्प प्रक्रिया (एक वादा को हल करने के लिए) A+ spec में देखा जा सकता है।
संपादित करें।
लोग आमतौर पर resolve
का उपयोग पहली तर्क के नाम के रूप में करते हैं क्योंकि ऐसा पहला तर्क के रूप में पारित कॉलबैक समाधान प्रक्रिया को आमंत्रित करता है। यह वादा पूरा नहीं करता है (वादा अभी भी खारिज कर दिया जा सकता है), यह सिर्फ वादे को हल करना शुरू कर देता है। reject
तकनीक को spec में निर्दिष्ट नहीं किया गया है, यह वास्तव में संकल्प प्रक्रिया के छोटे सर्किटों की तरह है ताकि वादा reject
(वास्तव में आपको हल नहीं किया गया) के साथ सुलझाया जा सके।
यहाँ कुछ उदाहरण हैं जहां p
resolve
का उपयोग करके अस्वीकार कर दिया है कर रहे हैं:
इस बिंदु 2.3.1 है।
var p = new Promise(resolve => setTimeout(() => resolve(p), 0));
इस बिंदु 2.3.2.3 है।
var p = Promise.resolve(Promise.reject('reason'));
यह बिंदु 2.3.3.2 है।
var thenable = { get then() { throw new Error(); } }
var p = Promise.resolve(thenable);
यह इस बिंदु 2.3.3.4.2
var thenable = {
then: function(){
throw new Error();
}
}
var p = Promise.resolve(thenable);
मैं Promise.resolve
यहाँ बजाय प्रयोग समारोह वादा निर्माता के लिए नीचे पारित की पहली बहस के है बिंदु 2.3.3.3.3
var thenable = {
then: function(resolvePromise, rejectPromise){
rejectPromise(new Error());
}
}
var p = Promise.resolve(thenable);
है, लेकिन वे वही होना चाहिए। कई बार resolve
समारोह निर्माता के लिए नीचे पारित कर दिया है:
var p = this;
var cb = function(x){
resolve(p, x);
}
आप निश्चित रूप से नीचे के रूप में इन परीक्षणों लिख सकते हैं:
var p = new Promise(function(resolve){
resolve(thenable);
});
देखें http://stackoverflow.com/questions/35042068/why-is-onrejected-not-called-following-promise-all-where-promise-reject-incl – guest271314
यह लिंक प्रासंगिक प्रतीत नहीं होता है। क्या आप विस्तार से समझा सकते हैं? – rrowland
_ "यह मेरे लिए हुआ कि शायद अगर मैं कॉलबैक को हल करने में कोई त्रुटि पास करता हूं, तो यह वादा को अस्वीकार कर देगा।" _ 'वादा' को 'त्रुटि' के साथ मान के रूप में हल किया गया था, 'वादा' अस्वीकार नहीं किया गया था। – guest271314