मैं की तरह एक .then
समारोह को सीधे Promise.all
पास करना चाहते हैं:सीधे क्यों चल रहा है। एक .then फ़ंक्शन को एक त्रुटि फेंकता है?
const test = [
Promise.resolve(),
Promise.resolve(),
Promise.resolve(),
Promise.resolve()
];
Promise.resolve(test) // It's supposed to be an AJAX call
.then(Promise.all) // Get an array of promises
.then(console.log('End');
लेकिन इस कोड एक त्रुटि Uncaught (in promise) TypeError: Promise.all called on non-object
फेंकता है।
जब मैं आशुलिपि वाक्यविन्यास निकालने के लिए, यह काम करता है:
Promise.resolve(test)
.then(queries => Promise.all(queries))
.then(console.log('End'));
तो क्यों एक Promise.all
एक .then
को सीधे पारित कर एक त्रुटि फेंकता है? (और क्यों एक console.log
ठीक काम करता है?)
क्यों? (मैं इसे सीधे सरणी पर उपयोग नहीं कर सकता, यह सरणी अजाक्स कॉल से आती है, मैं अपना प्रश्न अपडेट करूंगा) – RChanaud
@RChanaud [Spec] (https://tc39.github.io/ecma262/2017/#sec- वादा.ल) ऐसा कहता है "चलो सी यह मान हो। यदि टाइप (सी) ऑब्जेक्ट नहीं है, तो टाइप टाइपर अपवाद फेंक दें।" " सभी फ़ंक्शन को यह मान एक कन्स्ट्रक्टर फ़ंक्शन होने की आवश्यकता है जो वादा कन्स्ट्रक्टर के पैरामीटर सम्मेलनों का समर्थन करता है।" –
@RChanaud मुझे संदेह है कि आपका AJAX अनुरोध जादुई रूप से वादे देता है। तो अभी भी एक जगह है जहां आप 'फिर' कॉलबैक के अंदर वादे का एक सरणी बनाते हैं ताकि आप सरणी –