Promise.all
dan Promise.allSettled
adalah kedua -dua kaedah dalam JavaScript yang digunakan untuk mengendalikan pelbagai janji, tetapi mereka berbeza dengan cara mereka merawat janji -janji dan hasil yang mereka kembali.
Promise.all
mengambil janji -janji dan mengembalikan janji tunggal yang menyelesaikan apabila semua janji -janji yang dapat diselesaikan telah diselesaikan, atau menolak dengan segera atas mana -mana janji input yang ditolak. Nilai yang diselesaikan dari janji yang dikembalikan adalah pelbagai nilai yang diselesaikan dari janji -janji input, dalam urutan yang sama seperti yang mereka lakukan.
Sebaliknya, Promise.allSettled
juga mengambil janji -janji, tetapi ia menunggu sehingga semua janji telah diselesaikan atau ditolak. Janji yang dikembalikan menyelesaikan semua janji input telah diselesaikan (sama ada diselesaikan atau ditolak). Nilai yang telah diselesaikan adalah pelbagai objek, di mana setiap objek menerangkan hasil janji yang sepadan dengan yang boleh dimakan. Setiap objek mempunyai medan status
, yang sama ada "fulfilled"
(untuk janji yang diselesaikan) atau "rejected"
(untuk janji yang ditolak), bersama -sama dengan medan value
(untuk janji yang diselesaikan) atau medan reason
(untuk janji yang ditolak).
Ringkasnya, perbezaan utama terletak pada bagaimana kaedah -kaedah ini mengendalikan penolakan janji: Promise.all
. Semua gagal dengan cepat, menolak sebaik sahaja mana -mana janji menolak, sementara Promise.allSettled
.
Promise.all
mengendalikan penolakan janji yang berbeza berbanding dengan Promise.allSettled
. Apabila menggunakan Promise.all
, jika mana -mana janji -janji dalam menolaknya, Promise.all
keseluruhannya. Janji Janji segera. Alasan penolakan akan menjadi sebab janji pertama yang ditolak. Sebarang janji -janji berikutnya, sama ada mereka menyelesaikan atau menolak, tidak menjejaskan keadaan Promise.all
Janji semua, kerana ia telah ditolak.
Sebaliknya, Promise.allSettled
tidak menolak apabila menghadapi janji yang ditolak. Sebaliknya, ia terus menunggu semua janji -janji di dalamnya sama ada menyelesaikan atau menolak. Sebaik sahaja semua janji telah diselesaikan, Promise.allSettled
Janji -janjinya menyelesaikan dengan pelbagai objek yang menggambarkan hasil setiap janji.
Untuk menggambarkan perbezaan, pertimbangkan contoh di mana anda mempunyai tiga janji: dua yang menyelesaikan dengan cepat dan satu yang menolak selepas kelewatan. Dengan Promise.all
. Semua janji akan menolak sebaik sahaja janji yang ditangguhkan, walaupun dua janji yang lain telah diselesaikan. Dengan Promise.allSettled
, janji akhirnya akan menyelesaikan dengan array yang menunjukkan bahawa dua janji diselesaikan dan satu ditolak.
Anda akan memilih untuk menggunakan Promise.allSettled
Selesai dengan Promise.all
Semua dalam senario di mana anda perlu mengetahui hasil semua janji, tanpa mengira sama ada mereka menyelesaikan atau menolak. Berikut adalah beberapa senario khusus:
Promise.allSettled
. Ia membolehkan anda memproses respons yang berjaya semasa mengendalikan kesilapan untuk permintaan yang gagal.Promise.allSettled
membantu anda memahami operasi mana yang berjaya dan yang gagal tanpa mengganggu keseluruhan proses.Promise.allSettled
Promise.allSettled
menyediakan hasil yang komprehensif yang boleh berguna untuk tujuan debug atau pemantauan. Implikasi prestasi menggunakan Promise.all
versus Promise.allSettled
dapat diringkaskan seperti berikut:
Promise.all
Semua boleh lebih cepat dalam menyelesaikan jika semua janji menyelesaikan dengan cepat, tetapi ia akan menolak dengan segera jika ada janji yang ditolak. Ini boleh memberi manfaat dalam senario di mana penolakan awal adalah wajar, kerana ia berhenti memproses janji -janji selanjutnya. Promise.allSettled
, sebaliknya, akan sentiasa menunggu semua janji untuk menyelesaikan, yang mungkin mengambil masa lebih lama jika beberapa janji mengambil masa yang lama untuk menolak.Promise.all
Semua boleh menggunakan sumber yang lebih sedikit kerana ia menghentikan pemprosesan sebaik sahaja sebarang janji menolak. Promise.allSettled
Promise.all
, anda hanya perlu mengendalikan satu penolakan, yang dapat memudahkan pengendalian ralat dalam beberapa kes. Promise.allSettled
Promise.allSettled
Ini boleh berfaedah dalam senario di mana anda memerlukan hasil semua janji, tetapi ia boleh menjadi kelemahan jika beberapa janji tidak perlu diproses lebih jauh selepas kegagalan awal. Ringkasnya, sementara Promise.all
Semua boleh menjadi lebih cepat dan lebih cekap sumber dalam situasi tertentu, Promise.allSettled
memberikan hasil yang lebih komprehensif pada kos potensi peningkatan masa pemprosesan dan penggunaan sumber. Pilihan di antara mereka harus berdasarkan keperluan khusus permohonan anda.
Atas ialah kandungan terperinci Apakah perbezaan antara janji dan janji.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!