我一直在努力弄清楚如何最好地实施重试,例如使用promises下载失败。我最好的猜测是用一个新的promise来解决一个promise(参见下面的伪代码),但是我在文档中找到的所有东西都是可以使用thenable调用Promise.resolve()(我相信,使用Promise) )。这是否也适用于promise构造函数中的resolve回调?我的方法是正确的还是有更好的方法来实现重试?
function getdata(url) {
return new Promise(function(resolve, reject) {
ajaxcall({
url: url,
success: function(data) { resolve(data); },
failure: function(err) {
if(retriable(err)) {
resolve(getdata(url));
}
else {
reject(err);
}
}
});
});
}
答案 0 :(得分:4)
你的方法会奏效。当promise被传递给Promise构造函数的resolve回调时,该promise的分辨率值被用作" outer"的解析值。的承诺。
将wbBook2.close
包装在一个promise-returns函数中可能会更清晰,这样你就不会混合和匹配promise和callback范例。
eval
答案 1 :(得分:-1)
您可以更改代码以调用Promise中的内部函数。像这样:
function getdata(url) {
return new Promise(function(resolve, reject) {
function call() {
return ajaxcall({
url: url,
success: function(data) { resolve(data); },
failure: function(err) {
if(retriable(err)) {
call();
}
else {
reject(err);
}
}
});
}
call();
});
}