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