簡體   English   中英

自定義重試功能

[英]Custom Retry Function

嘗試創建一個函數retry ,該函數返回一個函數,該函數調用並從傳遞其參數的回調函數返回值並捕獲錯誤。 如果錯誤被捕獲,它應該返回帶有 catch 的回調函數。 如果錯誤數超過計數,則拋出錯誤。

這是到目前為止所做的:

const retry = (count, callback) => {
    let attempts = 1;
    const _retry = async (...args) => callback(...args)
        .catch(err => {
            if (attempts > count) throw err
            attempts++
            return _retry(...args)
        });
    return _retry
}

調用時出現問題

var r = Math.random().toString(36).slice(2)
var arg = (n) => async (...v) =>
    --n < 0 ? v : Promise.reject(Error(`>>> x:${v}`))
    
await retry(3, arg(2))(r)

在我看來,由於 async 關鍵字, retry 現在返回一個 Promise 。 嘗試從重試定義中刪除 async 關鍵字並使 _retry 函數異步:

const retry = (count, callback) => {
    let attempts = 1;
    return _retry = async (...args) => callback(...args)
        .catch(err => {
            if (attempts > count) throw err
            attempts++
            return _retry(...args)
        });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM