Rumah >hujung hadapan web >tutorial js >Analisis mendalam tentang cara menggunakan Promise.allSettled()

Analisis mendalam tentang cara menggunakan Promise.allSettled()

青灯夜游
青灯夜游ke hadapan
2021-10-13 10:00:463096semak imbas

Bagaimana untuk menggunakan Promise.allSettled()? Artikel berikut akan membawa anda memahami Promise.allSettled() dan memperkenalkan cara menggunakannya. Saya harap ia akan membantu anda. Kaedah

Analisis mendalam tentang cara menggunakan Promise.allSettled()

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.

1. Promise.allSettled()

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

  • Selepas menghuraikan semua janji, statusnya boleh diekstrak menggunakan sintaks
Sebelum ini, kami mentakrifkan dua fungsi

yang mudah. Analisis mendalam tentang cara menggunakan Promise.allSettled()

Pertama,

membalas janji yang ditepati dengan then setelah

masa berlalu
statusesPromise.then(statuses => {
 statuses; // [{ status: '...', value: '...' }, ...]
});

async/awaitKedua,

- membalas janji, Tolak
const statuses = await statusesPromise;
statuses; // [{ status: '...', value: '...' }, ...]
selepas

masa berlalu. Akhir sekali, kami mencuba

dengan fungsi pembantu ini.

Promise.allSettle()helper2.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:delayvalue

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)delayreason membalas janji

yang diselesaikan dalam masa 1 saat, sejurus selepas sayur-sayuran dan buah-buahan diselesaikan, secara selari.

promise.allsettle()

menyelesaikan kepada tatasusunan yang mengandungi keadaan.

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

2.2 Janji ditolak

statusesPromise

Bayangkan tiada lagi buah-buahan di kedai runcit. Dalam kes ini, kami menolak janji buah.
  • Bagaimanakah ia berfungsi dalam kes ini?status: 'fulfilled', value: ['potatoes', 'tomatoes'] }

  • Contoh dalam talian: https://codesandbox.io/s/one-rejected-ij3uo?file = /src/index.js

    { status: 'fulfilled', value: ['oranges', 'apples'] }

  • Janji yang dikembalikan dihuraikan ke dalam tatasusunan status selepas
saat:

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

    2.3 Semua janji ditolak
  • promiseBagaimana jika kedai runcit itu habis dijual sayur-sayuran dan buah-buahan? Dalam kes ini, kedua-dua janji akan ditolak. { status: 'fulfilled', value: ['potatoes', 'tomatoes'] }

  • Contoh dalam talian: https://codesandbox.io/s/all-rejected-z4jee?file=/src/index.js

    { status: 'rejected', reason: Error('Out of fruits') }

    di Dalam kes ini,
  • masih berjaya menghuraikan ke dalam tatasusunan status. Walau bagaimanapun, tatasusunan mengandungi status janji yang ditolak.

statusesPromise3. 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!

Kenyataan:
Artikel ini dikembalikan pada:dmitripavlutin.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam