Tapi sepertinya itu bukan cara yang tepat untuk melakukannya ..
Itu memang cara yang tepat untuk melakukannya (atau setidaknya sebuah cara yang tepat untuk melakukannya). Ini adalah aspek kunci dari promise, ini adalah pipeline, dan data dapat dipijat oleh berbagai penangan di pipeline.
Contoh:
const promises = [
new Promise(resolve => setTimeout(resolve, 0, 1)),
new Promise(resolve => setTimeout(resolve, 0, 2))
];
Promise.all(promises)
.then(data => {
console.log("First handler", data);
return data.map(entry => entry * 10);
})
.then(data => {
console.log("Second handler", data);
});
( catchpenangan dihilangkan agar singkatnya. Dalam kode produksi, selalu sebarkan janji, atau tangani penolakan.)
Output yang kami lihat dari itu adalah:
Penangan pertama [1,2]
Penangan kedua [10,20]
... karena penangan pertama mendapatkan resolusi dari dua janji ( 1dan 2) sebagai larik, lalu membuat larik baru dengan masing-masing dikalikan dengan 10 dan mengembalikannya. Pawang kedua mendapatkan apa yang dikembalikan pawang pertama.
Jika pekerjaan tambahan yang Anda lakukan sinkron, Anda juga dapat meletakkannya di penangan pertama:
Contoh:
const promises = [
new Promise(resolve => setTimeout(resolve, 0, 1)),
new Promise(resolve => setTimeout(resolve, 0, 2))
];
Promise.all(promises)
.then(data => {
console.log("Initial data", data);
data = data.map(entry => entry * 10);
console.log("Updated data", data);
return data;
});
... tetapi jika asinkron, Anda tidak akan ingin melakukannya karena akhirnya menjadi bersarang, dan penumpukan dapat dengan cepat menjadi tidak terkendali.
rejectmendapatkan nilai setelahPromisefungsi awal ? Atau akankah melempar kesalahan di mana saja dalam rantai membawa Anda ke.catch()? Jika demikian, apa gunanyarejectsejak awal? Mengapa tidak membuang kesalahan saja? Terima kasih sekali lagi,