Janji menyediakan mekanisme untuk mengendalikan operasi tak segerak dengan membenarkan pembangun merantainya bersama-sama dan menurunkan ralat atau hasil. Walau bagaimanapun, adalah penting untuk memahami cara janji menangani ralat untuk memanfaatkannya dengan berkesan.
Dalam contoh yang disediakan:
promise1.then(...) promise2.then(...) promise3.then(...)
Masing-masing kemudiannya tidak membayangkan pergantungan pada kejayaan penyelesaian janji sebelumnya. Sebaliknya, ini menunjukkan pergantungan pada resolusi janji sebelumnya, tidak kira sama ada ia dipenuhi atau ditolak.
Pengendalian ralat tidak dikendalikan secara automatik dalam janji. Adalah menjadi tanggungjawab pembangun untuk melampirkan pengendali ralat kepada setiap satu, jika mereka ingin mengendalikan ralat.
Dalam contoh, promise1 mengendalikan ralat, tetapi promise2 dan promise3 tidak. Oleh itu, apabila d1 menolak dengan ralat, promise1 mencatat ralat dan mengembalikannya, tetapi promise2 dan promise3 menerima hasil pengendali ralat promise1 (yang tidak ditentukan) dan menganggapnya sebagai janji yang dipenuhi.
Untuk mengendalikan ralat dengan betul, seseorang mesti:
Adalah salah untuk menganggap bahawa rantaian janji secara automatik menyebarkan ralat. Jika ralat tidak dikendalikan secara eksplisit dan disebarkan semula, janji-janji berikutnya tidak akan menerimanya. Inilah sebabnya mengapa pengendali ralat adalah penting dalam janji.
Untuk menyebarkan ralat dengan betul, contoh boleh diubah suai seperti berikut:
var d1 = d(); var promise1 = d1.promise.then( function(wins) { return wins;}, function(err) { throw err;}); var promise2 = promise1.then( function(wins) { return wins;}, function(err) { throw err;}); var promise3 = promise2.then( function(wins) { return wins;}, function(err) { throw err;}); d1.reject(new Error());
Dengan pengubahsuaian ini, ralat merebak melalui rantaian, dan semua janji akan berlaku tolak.
Memahami cara janji mengendalikan ralat adalah penting untuk pengendalian ralat yang berkesan dalam operasi tak segerak. Adalah penting untuk melampirkan pengendali ralat secara eksplisit, membuang semula ralat untuk penyebaran atau mengembalikan janji yang ditolak untuk menangani kegagalan dengan betul dan mengekalkan integriti rantaian janji.
Atas ialah kandungan terperinci Bagaimanakah Janji Mengendalikan Ralat dan Menyebarkannya Melalui Rantaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!