/ / वादों की यह श्रृंखला तुरंत क्यों हल हो जाती है? - जावास्क्रिप्ट, वादा, परमानंद -6, es6-वादा

वादे की यह श्रृंखला तुरंत क्यों हल हो जाती है? - जावास्क्रिप्ट, वादा, ecmascript-6, es6-वादा

क्या कोई मुझे समझा सकता है कि परिणामी वादा क्यों (d) नीचे दिए गए कोड से तुरंत हल किया जाता है?

//promises that are never resolved nor rejected
var a = new Promise(function(r,re){});
var b = new Promise(function(r,re){});
var c = new Promise(function(r,re){});

var d = [a, b, c].reduce(function (previousPromise, promise) {
return previousPromise.then(promise);
}, Promise.resolve());

मैं उन वादों की एक सरणी बना रहा हूं जो हमेशा के लिए लंबित हैं, इसलिए परिणामी वादा भी हमेशा के लिए लंबित होना चाहिए क्योंकि यह बाद में भुगतान करने का इंतजार करता है (यहाँ प्रस्तुत है)। मैं कुछ समय के लिए वादों का उपयोग कर रहा हूं, लेकिन मैं स्पष्ट रूप से यहां कुछ याद कर रहा हूं।

क्रोम DevTools - वादे कोड निष्पादित किया गया

उत्तर:

उत्तर № 1 के लिए 11

then doesn "टी एक ले लो Promise इनपुट के रूप में, यह 2 कार्य करता है, 1 पूर्ति के लिए और 1 अस्वीकृति के लिए।

कारण d हल किया गया है इस तथ्य के कारण कि गैर-कॉल करने योग्य मूल्य (यहां तक ​​कि एक नंबर शाब्दिक - 1, या undefined) ऑनफ़िल्ड फंक्शन को "आइडेंटिटी" से बदलने का कारण बनता है, जो कि पिछले चरण में जो भी मूल्य हल किया गया था, उसे फिर से पूरा करता है। देख PerformPromiseThen

इस तरह प्रयास करें:

//promises that are never resolved nor rejected
var a = function() { return new Promise(function(r,re){}); };
var b = function() { return new Promise(function(r,re){}); };
var c = function() { return new Promise(function(r,re){}); };
// or simply, a = b = c after setting the function for c

var d = [a, b, c].reduce(function (previousPromise, fn) {
return previousPromise.then(fn, /* not passing a rejection handler... */);
}, Promise.resolve());

या वैकल्पिक रूप से ...

//promises that are never resolved nor rejected
var a = new Promise(function(r,re){});
var b = new Promise(function(r,re){});
var c = new Promise(function(r,re){});

var d = [a, b, c].reduce(function (previousPromise, promise) {
return previousPromise.then(function() {return promise;});
}, Promise.resolve());

और जब से आप वादे और ES6 का उपयोग कर रहे हैं, आप अधिक संक्षिप्त हो सकते हैं:

let a = new Promise(() => {});
let b = new Promise(() => {});
let c = new Promise(() => {});

let d = [a, b, c].reduce((previousPromise, promise) =>
previousPromise.then(() => promise),
Promise.resolve());

उत्तर № 2 के लिए -1
var d = [a, b, c].reduce(function (previousPromise, promise) {
return previousPromise.then(promise);
}, Promise.resolve());

D वादे की आपकी प्रारंभिक स्थिति हल हो गई है, आप Promise.resolve () के रूप में सेट हैं। कमी के प्रलेखन की जाँच करें https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce