Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Melaksanakan Corak Reka Bentuk Percubaan Semula Janji untuk Pengendalian Ralat yang Cekap?

Bagaimana untuk Melaksanakan Corak Reka Bentuk Percubaan Semula Janji untuk Pengendalian Ralat yang Cekap?

Patricia Arquette
Patricia Arquetteasal
2024-10-22 19:01:21318semak imbas

How to Implement Promise Retry Design Patterns for Efficient Error Handling?

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!

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