Rumah >hujung hadapan web >tutorial js >Polyfills of Promise.all()

Polyfills of Promise.all()

Linda Hamilton
Linda Hamiltonasal
2024-10-22 20:43:02438semak imbas

Polyfills of Promise.all()

Fungsi Promise.all()

Input : Ia memerlukan pelbagai Janji (tidak perlu)
Output: Ia mengembalikan Promise yang mengandungi pelbagai hasil daripada semua janji kejayaan.
Nota: Jika mana-mana janji gagal, janji itu ditolak serta-merta.

kod untuk Promise.myAll()

`
Promise.myAll = fungsi (janji) {
kembalikan Janji baharu(fungsi (selesaikan, tolak) {
// Semak sama ada input ialah tatasusunan
jika (!Array.isArray(janji)) {
return reject(new TypeError("Argumen mestilah array"));
}

let results = [];
let completedPromises = 0;

promises.forEach(function (promise, index) {
  // Use Promise.resolve to handle non-promise values
  Promise.resolve(promise)
    .then(function (value) {
      results[index] = value;
      completedPromises += 1;

      // If all promises are resolved
      if (completedPromises === promises.length) {
        resolve(results);
      }
    })
    .catch(function (error) {
      reject(error); // Reject if any promise fails
    });
});

// Handle case with empty array of promises
if (promises.length === 0) {
  resolve([]);
}

});
};
`

1. Jika semua janji berjaya diselesaikan

. Semua janji diselesaikan dan keputusannya disimpan dalam tatasusunan keputusan.
. Apabila bilangan janji yang diselesaikan sama dengan panjang tatasusunan input, janji luar diselesaikan dengan tatasusunan hasil.

2. Mengapa perlu menggunakan Promise.resolve()

. Tidak semestinya dalam tatasusunan janji semua nilai mestilah janji, ia boleh melalui sebarang nilai - nombor, rentetan atau sebarang fungsi segerak.

  1. Jika nilai yang diluluskan sudah menjadi janji - Ia akan mengembalikan janji yang sama, memastikan tiada pembungkusan atau perubahan tambahan berlaku.

  2. Jika nilai yang diluluskan bukan janji - Ia akan membungkus nilai dalam janji yang telah diselesaikan, membenarkan untuk menganggapnya seperti janji dan mengendalikannya dengan .then()

3. Mengapa Promise.resolve(), mengapa tidak Promise.reject()

supaya ia menyelesaikan dengan nilai, jika kita menggunakan reject ia akan terperangkap dalam blok tangkapan dengan nilai dianggap sebagai ralat.

4. Apa yang berlaku jika mana-mana Janji gagal?

  1. Ini mencetuskan panggilan reject() janji luar yang menyebabkan Promise.myAll() menolak serta-merta.
  2. setiap gelung akan diteruskan, kerana ia menyegerakkan atur cara
  3. selebihnya janji akan diselesaikan dan nilainya ditambah kepada hasil tetapi sebagai selesaiPromise!=promises.length ia tidak diselesaikan, dan jika masih mencuba ia akan diabaikan kerana Promise.myAll() tidak dalam keadaan belum selesai sekarang.

Jika anda masih mempunyai sebarang soalan, sila tanya dalam komen!

Atas ialah kandungan terperinci Polyfills of Promise.all(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn