javascript重试承诺直到解决

javascript重试承诺直到解决,javascript,Javascript,我有一些异步工作可能会失败并被拒绝。我想重试,直到它得到解决。我们已经找到了这种方法,但无法使其发挥作用。 dontGiveUp(doFirst)给了我: 未捕获类型错误:f.then不是函数(…) 有人能指出错误/或更好的方法吗 function dontGiveUp(f) { return f.then( undefined, function (err) { return dontGiveUp(f);

我有一些异步工作可能会失败并被拒绝。我想重试,直到它得到解决。我们已经找到了这种方法,但无法使其发挥作用。 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 resolver函数,直到解决为止:

函数顽固(promisedFunc){
var args=Array.from(参数);
返回promisedFunc.apply(null,args.slice(1)).catch(函数(){
返回顽固。应用(null,args);
});
};
rnd=功能(a,b){
返回新承诺(功能(res、rej){
var x=Math.random();
document.write('trying'+x+'
'); 如果(x>a&&x});一种可能是继续调用promise resolver函数,直到它被解析:

函数顽固(promisedFunc){
var args=Array.from(参数);
返回promisedFunc.apply(null,args.slice(1)).catch(函数(){
返回顽固。应用(null,args);
});
};
rnd=功能(a,b){
返回新承诺(功能(res、rej){
var x=Math.random();
document.write('trying'+x+'
'); 如果(x>a&&x});承诺失败,或仅解决一次状态。您应该在每次迭代中创建新的承诺顺便说一句,现在转到
dontGiveUp
中的无限递归,这会创建新的承诺吗?函数doFirst(In){return new Promise(function(resolve,reject){………..是的,函数
doFirst
创建新承诺失败,或只出现一次已解决状态。您应该在每次迭代中创建新承诺。顺便说一句,现在您转到
dontGiveUp
中的无限递归。这是否创建了新承诺?函数doFirst(In){返回新承诺(函数(解析,拒绝){………是的,函数
doFirst
createnewpromisethis:-)只有一个问题:如何将参数传递给正在尝试的函数?如果我做了如下操作:顽固(rnd(args))会得到类似“Uncaught(in Promise)TypeError:无法读取未定义(…)的“then”属性的错误避免!@georg:return promisedFunc.apply(this,args)之类的问题。然后(null,function(err){return digible.apply(promiseFunc,args);})
this works:-)只需一个问题:如何将参数传递给正在尝试的函数?如果我做了这样的事情:digible(rnd(args))会得到类似“Uncaught(in promise)”的错误TypeError:无法读取未定义(…)的属性'then'“请避免!@georg:类似于
返回promisedFunc.apply(this,args).then(null,function(err){return顽固的.apply(promiseFunc,args);})