Ich muss ein JavaScript-Versprechen erstellen, das nicht aufgelöst wird, bis eine bestimmte Bedingung erfüllt ist. Nehmen wir an, ich habe eine Bibliothek von Drittanbietern, und ich muss warten, bis eine bestimmte Datenbedingung in dieser Bibliothek existiert.Verwenden Sie Versprechen, um zu warten, bis Abfragebedingung erfüllt ist
Das Szenario, das mich interessiert, ist eines, wo es keine Möglichkeit gibt zu wissen, wann diese Bedingung erfüllt ist, außer durch einfaches Polling.
Ich kann ein Versprechen erstellen, das darauf wartet - und dieser Code funktioniert, aber gibt es einen besseren oder prägnanteren Ansatz für dieses 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();
}
}
Verbrauch:
ensureFooIsSet.then(function(){
...
});
Ich würde normalerweise eine maximale Abfragezeit implementieren, wollen aber nicht, dass das Problem hier trüben.
Das sieht OK aus. Sie müssen nicht wirklich den externen Bereich mit waitForFoo verschmutzen, aber es ist ein Detail und hängt vom Rest des Codes ab. Verwenden Sie native Versprechungen oder eine bestimmte Bibliothek? –
vereinbart - das ist nur ein Ausschnitt des gesamten Codes. Dies würde einheimische Promise verwenden. Ich habe dieses Muster ein paar Mal kommen lassen und interessiert, ob es einen besseren Weg gibt, das zu strukturieren. –
Ein einfacherer Ansatz wäre Object.observe das Bibliotheksobjekt –