प्रॉमिस के फंदे
आम गलतियों से बचना
Promises अन्य मानों की तरह काम नहीं करतीं
आप उनके मान को अधिकांश मानों की तरह प्रिंट नहीं कर सकते:
// This doesn't make sense w/ promises:console.log(Promise.resolve(42));
// We must use the `.then` interface:Promise.resolve(42).then(value => console.log(value));Promises गलती करने पर आपको चेतावनी नहीं देतीं
खैर, यह एक आम गलती है।
कई कारणों से, TC39 ने तय किया कि .then और .catch में null पास किया जा सकता है। उदाहरण के लिए, .then(null, null) वैध है और अपेक्षित व्यवहार यह है कि श्रृंखला में उस ‘स्टेप’ को छोड़ दिया जाए।
इसका दुर्भाग्यपूर्ण परिणाम यह है कि चीज़ें गड़बड़ करना बहुत आसान हो जाता है।
By Example
आइए एक छोटा चुनौती देखें: निम्नलिखित विकल्पों में से कौन‑सा console.log 42 करेगा?
// Option #1:Promise.resolve(42).then(console.log());
// Option #2:Promise.resolve(42).then(console.log);
// Option #3:Promise.resolve(42).then(value => console.log(value));
// Option #4:Promise.resolve(42) .then(console.log()) .then(console.log);The Answer
उत्तर है #2, #3 और #4।
क्यों? चलिए देखते हैं कि .then() को क्या पास किया गया types हैं:
var arg1 = console.log();var arg2 = console.log;var arg3 = value => console.log(value);
typeof arg1 === "undefined";typeof arg2 === "function";typeof arg3 === "function";अब भी सोच रहे हैं कि वह चौथा विकल्प कैसे काम करता है?
यह मूलतः इस प्रकार कार्य करता है:
// Option #4 - effectivelyPromise.resolve(42) .then(undefined) // यह मान पर कोई प्रभाव नहीं डालता, यह अगले `.then(fn)` को पास किया जाएगा .then(console.log);