Ralat Pengendalian dalam Promise.all
Apabila bekerja dengan pelbagai Promise, Promise.all membenarkan penyelesaian serentak mereka. Walau bagaimanapun, jika ralat berlaku dalam salah satu Janji, keseluruhan rantaian ditolak, mengaburkan resolusi lain yang berjaya. Artikel ini menangani cabaran untuk mengendalikan ralat Janji individu secara berkesan dalam rantai Promise.all.
Promise.all mematuhi prinsip "semua atau tiada apa-apa". Ia sama ada menyelesaikan dengan tatasusunan yang terdiri daripada nilai yang diselesaikan daripada semua Janji atau menolak sebaik sahaja Janji tunggal menghadapi ralat. Akibatnya, sebarang ralat yang mungkin berlaku dalam Janji lain tidak disedari.
Untuk mengendalikan ralat Janji individu, sesetengah perpustakaan menawarkan alternatif seperti Promise.when, yang menunggu penyelesaian atau penolakan semua Janji dalam tatasusunan. Walau bagaimanapun, kami akan menumpukan pada pendekatan yang lebih biasa menggunakan Promise.all asli JavaScript.
Dalam kod yang disediakan, pengguna cuba menambah pernyataan tangkapan untuk memintas ralat Promise individu, tetapi blok tangkapan, malangnya, tidak jangan aktifkan. Berikut ialah versi kod yang diubah suai yang sepatutnya menangani isu ini:
existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler() .then(function(data) { return data; }) .catch(function(err) { return err; }); }); return Promise.all(arrayOfPromises) }); existingPromiseChain.then(function(arrayResolved) { // Process resolved values or errors from the Promises }); // Always terminate the promise chain with a catch to capture any potential errors .catch(function(err) { console.log(err.message); // Log error message if any coding error occurred });
Kod yang disemak ini membalut setiap Promise (route.handler.promiseHandler()) dengan blok then/catch. Sekiranya berlaku ralat, blok tangkapan mengembalikan objek ralat, yang kemudiannya disertakan dalam tatasusunan yang Promise.all selesaikan.
Dengan mematuhi gelagat Promise.all, semua-atau-tiada apa-apa, pendekatan ini membolehkan kami mengendalikan kesilapan Janji individu dengan anggun sambil masih mendapat manfaat daripada penyelesaian janji serentak. Oleh itu, pembangun dengan yakin boleh mengendalikan ralat Promise dalam aplikasi mereka tanpa kehilangan kelebihan yang ditawarkan oleh Promise.all.
Atas ialah kandungan terperinci Bagaimana Anda Boleh Menangani Kesilapan Janji Individu dalam Rantaian Promise.all?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!