我有一些可以失败并被拒绝的异步工作。我想重试,直到它得到解决。找到了这种方法,但无法使其发挥作用。 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);
}
})
}
答案 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 + '!')
});