मैं यहाँ युक्ति का पालन कर रहा हूँ और मुझे यकीन नहीं है कि क्या यह onFulfilled को कई तर्कों के साथ बुलाया जा सकता है।
नहीं, बस पहला पैरामीटर वादा निर्माता में संकल्प मूल्य के रूप में माना जाएगा। आप एक वस्तु या सरणी की तरह एक संयुक्त मूल्य के साथ हल कर सकते हैं।
मुझे इस बात की कोई परवाह नहीं है कि कोई भी विशिष्ट वादे कैसे लागू होते हैं, मैं वादों के लिए w3c कल्पना का पालन करना चाहता हूं।
मेरा मानना है कि आप गलत हैं। विनिर्देश न्यूनतम बनाया गया है और वादा पुस्तकालयों के बीच अंतर करने के लिए बनाया गया है। विचार के लिए एक सबसेट है जो डोम फ्यूचर्स उदाहरण के लिए मज़बूती से उपयोग कर सकता है और पुस्तकालयों का उपभोग कर सकता है। .spread
कुछ समय के लिए आप जो मांगते हैं, उसे लागू करें । उदाहरण के लिए:
Promise.try(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c); // "Hello World!";
});
ब्लूबर्ड के साथ । एक समाधान यदि आप चाहते हैं कि यह कार्यक्षमता इसे पॉलीफ़िल करना है।
if (!Promise.prototype.spread) {
Promise.prototype.spread = function (fn) {
return this.then(function (args) {
return Promise.all(args); // wait for all
}).then(function(args){
//this is always undefined in A+ complaint, but just in case
return fn.apply(this, args);
});
};
}
इससे आप कर सकते हैं:
Promise.resolve(null).then(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c);
});
आराम से देशी वादे के साथ बेला । या ब्राउज़र में अब (२०१place) आम बात फैल का उपयोग करें:
Promise.resolve(["Hello","World","!"]).then(([a,b,c]) => {
console.log(a,b+c);
});
या प्रतीक्षा के साथ:
let [a, b, c] = await Promise.resolve(['hello', 'world', '!']);