Verspricht: Wiederholen Sie die operation, bis es gelingt?
Will ich führen eine operation wiederholt, mit Zunehmender Wartezeit zwischen den einzelnen Betrieb, bis er erfolgreich ist oder eine gewisse Zeit verstreicht. Wie strukturiere ich diese mit Versprechungen in F?
- Wenn Sie möchten, eine rekursive snippet mit einheimischen verspricht und max Wiederholungen, check this: stackoverflow.com/a/44577075/3032209
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle, die Antworten hier sind wirklich kompliziert meiner Meinung nach. Kos hat die richtige Idee, aber Sie verkürzen den code schreiben mehr idiomatische Versprechen-code:
Und mit Kommentaren:
Wenn Sie wollen, zu mal es Sie nach einer gewissen Zeit (sagen wir 10 Sekunden , können Sie einfach tun:
Ist diese Funktionalität direkt in Q, keine Notwendigkeit, neu zu erfinden 🙂
Q.delay(N)
mitnew Promise(r => setTimeout(r, N))
und Leben happily ever after 🙂q
auf die OP-Frage, aber vielen Dank für die Beantwortung so schnell.operation()
als solche wirft einen Fehler, noch vor dem Aufruf wiederholen, da der laden meinerfunction operation()
abgegrenzt. Gibt es irgendeine Abhilfe?Q.try
um ihn herum (oderPromise.resolve().then(operation)
in die Muttersprache verspricht Fall).Hier ist ein Beispiel, wie würde ich diesen Ansatz, mit einigen Hilfsfunktionen. Hinweis, die "maxTimeout" ist der kompliziertere Teil, da Sie die Rennen in zwei Staaten.
Dann zu verwenden, die diese Helfer, würden Sie so etwas tun:
Ich denke, man kann nicht auf der Ebene Versprechen - ein Versprechen, das nicht ein Betrieb, sondern ist nur ein Wert, der ankommen in der Zukunft, so kann man nicht eine Funktion definieren, die zusammengenommen
Promise -> Promise
, die es erreichen werden.Müssten Sie gehen eine Ebene nach unten und definieren Sie eine Funktion eingegeben
Operation -> Promise
wo Betrieb ist selbst eingegeben() -> Promise
. Ich nehme an, die Bedienung nimmt keine Parameter - Sie können teilweise gelten Sie im Voraus.Hier ein rekursiver Ansatz, verdoppelt sich der timeout auf jedem Lauf:
Demo: http://jsfiddle.net/0dmzt53p/
Etwas wie dieses:
.timeout
tut (eigentlich tut, was Sie verwendengoOn
nur es ist gebaut in der Bibliothek).Habe ich Folgendes mit Promises/A+ (die sollten in Ordnung sein mit Q)
Ich bin sicher, dass Sie herausfinden könnten wie man die Kaution nach maximal timeout.
a
?