Ich habe es mit einem NodeJs-Framework zu tun, das eine bestimmte Funktion benötigt, um synchron zu sein, aber ich muss einen Wert abrufen, auf den nur asynchron zugegriffen werden kann. In einer perfekten Welt könnte ich ein Versprechen geben, aber ich kann nicht.Wie warte ich darauf, dass ein Versprechen gelöst wird?
Als schnelle und unsaubere Lösung, habe ich die folgende Methode:
exports.synchronizePromise = function(promise) {
var value;
promise.then(function(promiseValue) {
value = promiseValue;
});
while (!value) {} // Wait for promise to resolve
console.log("DONE: " + value); // Never reached
return value;
};
Aber ich erhalte eine Fehlermeldung. Gibt es einen Weg, um das zu erreichen, was ich brauche?
Versprechungen machen die Dinge nicht magisch, sie machen nur einige asynchrone Prozesse einfacher zu codieren und durch mehrere Schritte zu verwalten. Verwenden Sie keine Schleife, um einzufrieren, sondern beheben Sie das Problem im Upstream, indem Sie die Synchronisation in zwei Teile aufteilen. – dandavis
@dandavis Ich überlegte, ein commit für das Framework zu machen, das ich benutze, um es so zu machen, dass die Funktion async sein kann, aber es wird an zu vielen Stellen aufgerufen und in 99% der Fälle muss es nicht asynchron sein. Es ist nicht wirklich eine Option, es stromaufwärts zu reparieren. –
Sie können sofort eine GUID nach dem Senden des Prozesses zurückgeben, und wenn der Prozess abgeschlossen ist, finden Sie die Guid in Ihrem data/dom und ersetzen Sie für den tatsächlichen Wert. – dandavis