javascript重试承诺直到解决

时间:2016-03-04 09:00:16

标签: javascript

我有一些可以失败并被拒绝的异步工作。我想重试,直到它得到解决。找到了这种方法,但无法使其发挥作用。 dontGiveUp(doFirst)给了我: 未捕获的TypeError: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);  
    }
})
}

1 个答案:

答案 0 :(得分:3)

一种可能性是继续调用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 + '!')
});