Chcę przekazać bezpośrednio Promise.all
do .then
funkcji jak:Dlaczego przekazywanie bezpośrednio Promise.all do funkcji .then powoduje błąd?
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');
Ale ten kod generuje błąd Uncaught (in promise) TypeError: Promise.all called on non-object
.
Kiedy usunąć składni skróconej, to działa:
Promise.resolve(test)
.then(queries => Promise.all(queries))
.then(console.log('End'));
Więc dlaczego Promise.all
przekazywane bezpośrednio do .then
zgłasza błąd? (I dlaczego console.log
działa dobrze?)
Dlaczego? (Nie mogę użyć go bezpośrednio na tablicy, ta tablica pochodzi z połączenia Ajax, będę aktualizować moje pytanie) – RChanaud
@RChanaud [Spec] (https://tc39.github.io/ecma262/2017/#sec- obietnica.all) mówi tak: "Niech C będzie tą wartością." Jeśli Typ (C) nie jest Obiektem, wyrzuć wyjątek TypeError. " " Funkcja wymaga tej wartości, aby była funkcją konstruktora obsługującą konwencje parametrów konstruktora Promise." –
@RChanaud Wątpię, czy twoja prośba o ajax przynosi magiczne obietnice. Więc wciąż istnieje miejsce, w którym tworzysz szereg obietnic wewnątrz callback 'then', dzięki czemu możesz zwrócić' Promise.all (obietnice) 'zamiast tablicy –