JavaScript重试承诺,直到解决

javascript retry promise until resolve

本文关键字:解决 重试 承诺 JavaScript      更新时间:2023-09-26

我有一些异步工作可能会失败并被拒绝。我想重试,直到它得到解决。已经找到了这种方法,但无法使其起作用。dontGiveUp(doFirst) 给我:未捕获的类型错误:f.then 不是一个函数(...)

有人可以指出错误/或更好的指责吗?

function dontGiveUp(f) {
    return f.then(
        undefined, 
        function (err) {
                return dontGiveUp(f); 
        }
    );
}

function doFirst(In){
return new Promise(function(resolve, reject) {
    console.log("doFirst Done" + In);    
    if (Math.random() >= 0.5) {
        console.log("resolve");    
        resolve(In);
    }
    else
    {
    console.log("reject");    
    reject(In);  
    }
})
}

一种可能性是继续调用 promise 解析器函数,直到它被解析:

function stubborn(promisedFunc) {
    var args = Array.from(arguments);
    return promisedFunc.apply(null, args.slice(1)).catch(function() {
      return stubborn.apply(null, args);
    });
};
rnd = function(a, b) {
    return new Promise(function(res, rej) {
        var x = Math.random();
        document.write('trying ' + x + '<br>');
        if(x > a && x < b)
            res(x)
        else
            rej();
    })
};
stubborn(rnd, 0.3, 0.4).then(function(x) {
    document.write('finally ' + x + '!')
});