Apakah Corak Reka Bentuk Percubaan Semula Janji Penting untuk Mengendalikan Operasi Asynchronous?

Patricia Arquette
Lepaskan: 2024-10-22 17:59:03
asal
735 orang telah melayarinya

What Are the Essential Promise Retry Design Patterns for Handling Asynchronous Operations?

Promise Retry Designs

Janji membenarkan pengaturcaraan tak segerak, menyediakan mekanisme yang fleksibel dan cekap untuk mengendalikan operasi tak segerak. Walau bagaimanapun, ia mungkin perlu untuk mereka bentuk corak untuk mengendalikan senario di mana janji memerlukan percubaan semula. Di sini kami membentangkan tiga corak reka bentuk janji cuba semula yang berbeza:

  1. Cuba Semula Sehingga Janji Selesai (dengan Kelewatan dan MaxRetries)
<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>
Salin selepas log masuk
  1. Cuba Semula Sehingga Keadaan pada Keputusan (dengan Kelewatan dan MaxRetries)
<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);
        });
    })</code>
Salin selepas log masuk
  1. Cuba Semula Dinamik Cekap Memori (dengan Percubaan Semula Tanpa Had)

Kami meneroka pendekatan alternatif berdasarkan membina rantaian .catch() dan bukannya rantaian .then() biasa:

<code class="javascript">var max = 5;
var p = Promise.reject();

for(var i=0; i<max; i++) {
    p = p.catch(attempt).catch(rejectDelay);
}
p = p.then(processResult).catch(errorHandler);</code>
Salin selepas log masuk

Corak ini sesuai untuk senario dengan bilangan terhad cuba semula dan nombor maksimum yang rendah untuk mengelakkan isu penggunaan memori.

  1. Cuba Semula Sehingga Keputusan Menepati Keadaan (Tanpa Berlengah-lengah)
<code class="javascript">var max = 5;
var p = Promise.reject();

for(var i=0; i<max; i++) {
    p = p.catch(attempt).then(test);
}
p = p.then(processResult).catch(errorHandler);</code>
Salin selepas log masuk
  1. Cuba Semula Sehingga Keputusan Menepati Syarat (Dengan Kelewatan)
<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);
    // Don't simplify this to `p.catch(attempt).then(test, rejectDelay)` as test failures won't be caught.
}
p = p.then(processResult).catch(errorHandler);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah Corak Reka Bentuk Percubaan Semula Janji Penting untuk Mengendalikan Operasi Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!