Ich habe versucht herauszufinden, wie man das Wiederholen von z. ein fehlgeschlagener Download mit Versprechen. Meine beste Vermutung ist, ein Versprechen mit einem neuen Versprechen zu lösen (siehe den Pseudocode unten), aber alles, was ich in der Dokumentation finden konnte, ist, dass Promise.resolve() mit einem thenable (und so, glaube ich, mit einem Versprechen) aufgerufen werden kann). Gilt dies auch für den Auflösungs-Callback im Promethe-Konstruktor? Ist meine Vorgehensweise korrekt oder gibt es eine bessere Möglichkeit, eine Wiederholung durchzuführen?Wie man ein Versprechen in ES6 erneut versucht
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);
}
}
});
});
}
Das ziemlich einfach ist, herauszufinden: 'neue Promise (resolve => resolve (Promise.resolve (42))) dann (v => console.log (v));' Protokolle. '42', kein Versprechen. Also ja, es scheint auch mit "Entschlossenheit" zu funktionieren. –
Generic Versprechen Retry-Helfer 'var retry = Fn => _ => Fn(). Catch (Wiederholung (Fn));' –
generische begrenzte Anzahl von Versprechen Wiederholungen 'var retryP = (Fn, Retry) => Fn(). catch (err => retry> 0? retryP (fn, retry - 1): Promise.reject (err)); ' –