Verwenden Sie Versprechen, zu warten, bis Sie abgefragt Bedingung erfüllt ist

Brauche ich zum erstellen einer JavaScript Versprechen, dass wird erst aufgelöst, wenn eine bestimmte Bedingung wahr ist. Sagen wir, ich habe eine 3rd-party-Bibliothek, und ich muss warten, bis eine bestimmte Daten-Bedingung innerhalb dieser Bibliothek.

Dem Szenario, das ich bin daran interessiert, eine ist, wo es keine Möglichkeit gibt zu wissen, Wann diese Bedingung erfüllt ist, andere als einfach abrufen.

Ich kann ein Versprechen, dass wartet auf Sie - und dieser code funktioniert, aber gibt es eine bessere oder genauere Ansatz zu diesem problem?

function ensureFooIsSet() {
    return new Promise(function (resolve, reject) {
        waitForFoo(resolve);
    });
}

function waitForFoo(resolve) {
    if (!lib.foo) {
        setTimeout(waitForFoo.bind(this, resolve), 30);
    } else {
        resolve();
    }
}

Verwendung:

ensureFooIsSet().then(function(){
    ...
});

Ich würde normalerweise für die Umsetzung einer max poll-Zeit, aber wollte nicht, dass das cloud-Thema geht es hier.

  • Das sieht OK. Sie nicht wirklich brauchen, um verschmutzen der externe Bereich mit waitForFoo aber es ist ein detail und hängt den rest des Codes. Verwenden Sie native verspricht oder eine bestimmte Bibliothek ?
  • vereinbart - dies ist nur ein Ausschnitt der gesamte code. Dies würde den Einsatz von nativen Versprechen. Ich habe diese Muster kommen eine Zeit oder zwei und interessiert, ob es einen besseren Weg, um die Struktur dieser.
  • Ein einfacher Ansatz wäre, zu widersprechen.beachten Sie die library-Objekt
  • sehr schön. Ich hatte gehofft, für etwas wie das. Je nach browser-Anforderungen, die ich möglicherweise nicht in der Lage, es zu benutzen, aber das ist ein guter Tipp.
  • Gut, dann polyfill es in älteren Browsern.
  • github.com/allain/promise-poll/blob/master/index.js - enthält polyfil

Schreibe einen Kommentar