Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Melaksanakan Corak Reka Bentuk Percubaan Semula Janji untuk Pengendalian Ralat yang Cekap?
Corak Reka Bentuk Percubaan Semula Janji: Pendekatan Cekap Memori
Apabila menggunakan Promises, mencuba semula operasi dalam menghadapi kegagalan atau sehingga syarat-syarat tertentu dipenuhi adalah keperluan biasa. Dalam artikel ini, kami akan meneroka tiga corak reka bentuk Promise cuba semula:
1. Cuba Semula Sehingga Janji Bertekad
Corak ini terus mencuba semula sehingga Janji selesai. Ia menentukan kiraan percubaan semula maksimum dan kelewatan antara percubaan.
<code class="javascript">Promise.retry = function(fn, times, delay) { return new Promise(function(resolve, reject) { var error; var attempt = function() { if (times == 0) { reject(error); } else { fn().then(resolve) .catch(function(e){ times--; error = e; setTimeout(function(){attempt()}, delay); }); } }; attempt(); }); };</code>
2. Cuba Semula Sehingga Syarat Keputusan Ditepati
Corak ini mencuba semula sehingga syarat yang ditentukan dipenuhi pada keputusan Janji. Ia juga termasuk kiraan percubaan semula maksimum dan kelewatan antara percubaan.
<code class="javascript">work.publish() .then(function(result){ return new Promise(function(resolve, reject){ var intervalId = setInterval(function(){ work.requestStatus(result).then(function(result2){ switch(result2.status) { case "progress": break; //do nothing case "success": clearInterval(intervalId); resolve(result2); break; case "failure": clearInterval(intervalId); reject(result2); break; } }).catch(function(error){clearInterval(intervalId); reject(error)}); }, 1000); }); }) .then(function(){console.log('done')}) .catch(console.error);</code>
3. Cuba Semula Dinamik Cekap Memori
Corak ini menggunakan pendekatan rekursif, menawarkan percubaan semula tanpa had dengan kelewatan yang boleh dikonfigurasikan.
<code class="javascript">var max = 5; var p = Promise.reject(); for(var i=0; i<max; i++) { p = p.catch(attempt).then(test).catch(rejectDelay); } p = p.then(processResult).catch(errorHandler);</code>
Dengan membina rantai .catch(), corak ini membenarkan untuk pelaksanaan percubaan semula yang ringkas, terutamanya dalam senario dengan kiraan percubaan semula maksimum yang rendah atau ujian segerak.
Setiap corak ini menyediakan penyelesaian yang fleksibel dan cekap untuk mencuba semula operasi Promise. Bergantung pada keperluan aplikasi anda, anda boleh memilih corak yang paling sesuai dengan keperluan anda.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Corak Reka Bentuk Percubaan Semula Janji untuk Pengendalian Ralat yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!