Rumah >hujung hadapan web >tutorial js >Analisis mendalam tentang cara menggunakan Promise.allSettled()
Bagaimana untuk menggunakan Promise.allSettled()? Artikel berikut akan membawa anda memahami Promise.allSettled() dan memperkenalkan cara menggunakannya. Saya harap ia akan membantu anda. Kaedah
Promise.allSettled()
mengembalikan fulfilled
selepas semua janji yang diberikan telah rejected
atau promise
, dengan susunan objek, setiap objek An mewakili hasil janji yang sepadan.
Seterusnya, mari lihat cara Promise.allSettled()
berfungsi.
Promise.allSettled()
boleh digunakan untuk melaksanakan operasi tak segerak bebas secara selari dan mengumpul hasil operasi ini.
Fungsi ini menerima tatasusunan promise
(biasanya objek boleh lelar) sebagai parameter:
const statusesPromise = Promise.allSettled(promises);
Apabila semua input promises
sama ada fulfilled
atau rejected
, statusesPromise
akan menyelesaikan kepada tatasusunan dengan statusnya
{ status: 'fulfilled', value: value }
— jika janji yang sepadan telah atau fulfilled
jika janji yang sepadan telah diselesaikan oleh
{status: 'rejected', reason: reason}
rejected
yang mudah.
Pertama, membalas janji yang ditepati dengan then
setelah
statusesPromise.then(statuses => { statuses; // [{ status: '...', value: '...' }, ...] });
async/await
Kedua,
const statuses = await statusesPromise; statuses; // [{ status: '...', value: '...' }, ...]selepas
Promise.allSettle()
helper
2.1 Semua janji ditepati
resolveTimeout(value, delay)
Kami juga melawat kedai runcit tempatan untuk sayur-sayuran dan buah-buahan. Mengakses setiap senarai ialah operasi tak segerak:delay
value
function resolveTimeout(value, delay) { return new Promise( resolve => setTimeout(() => resolve(value), delay) ); }Contoh dalam talian: https://codesandbox.io/s/all-resolved-yyc0l?file=/src/index.js
rejectTimeout(reason, delay)
delay
reason
membalas janji
promise.allsettle()
Item pertama tatasusunan mengandungi status lengkap sayur-sayuran:
const statusesPromise = Promise.allSettled([ resolveTimeout(['potatoes', 'tomatoes'], 1000), resolveTimeout(['oranges', 'apples'], 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }, // { status: 'fulfilled', value: ['oranges', 'apples'] } // ]
Dengan cara yang sama, item kedua ialah buah-buahan Status siap:
Promise.allSettled([...])
statusesPromise
statusesPromise
Bagaimanakah ia berfungsi dalam kes ini?status: 'fulfilled', value: ['potatoes', 'tomatoes'] }
{ status: 'fulfilled', value: ['oranges', 'apples'] }
Yang pertama daripada tatasusunan Item, sayur
berjaya dihuraikan:
promise.allsettle()
const statusesPromise = Promise.allSettled([ resolveTimeout(['potatoes', 'tomatoes'], 1000), rejectTimeout(new Error('Out of fruits!'), 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }, // { status: 'rejected', reason: Error('Out of fruits!') } // ]Item kedua, kerana janji buah ditolak, berada dalam status penolakan:
Walaupun janji kedua dalam tatasusunan input ditolak, Promise.allSettled([...])
masih akan berjaya menyelesaikan tatasusunan status. 1
promise
Bagaimana jika kedai runcit itu habis dijual sayur-sayuran dan buah-buahan? Dalam kes ini, kedua-dua janji akan ditolak. { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }
{ status: 'rejected', reason: Error('Out of fruits') }
statusesPromise
3. Ringkasan
Janji boleh dijalankan secara selari dan status (ditepati atau ditolak) dikumpulkan ke dalam tatasusunan agregat.
berguna apabila anda perlu melakukan operasi tak segerak selari dan bebas dan mengumpul semua hasil, walaupun beberapa operasi tak segerak mungkin gagal.const statusesPromise = Promise.allSettled([ rejectTimeout(new Error('Out of vegetables!'), 1000), rejectTimeout(new Error('Out of fruits!'), 1000) ]); // wait... const statuses = await statusesPromise; // after 1 second console.log(statuses); // [ // { status: 'rejected', reason: Error('Out of vegetables!') }, // { status: 'rejected', reason: Error('Out of fruits!') } // ]
Alamat asal bahasa Inggeris: https://dmitripavlutin.com/promise-all-settled/
Pengarang: Dmitri Pavlutin
Lebih banyak pengaturcaraan berkaitan Untuk pengetahuan, sila layari: Video Pengaturcaraan! !
Atas ialah kandungan terperinci Analisis mendalam tentang cara menggunakan Promise.allSettled(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!