Wie zu blockieren, die auf der asynchronen Funktionen in JavaScript
Schreiben brauche ich eine Funktion in JavaScript, die gibt einen Staat, von dem Aufruf einer asynchronen Funktion. Aber der Anrufer erhält nur der Wert und keine callback-Funktion bereitgestellt werden. Ich habe versucht, so etwas wie:
function getState() {
var ret = null;
asyncCall("request",
function() { ret = "foo"; } //callback
);
while (ret === null)
; //block on the asynchronous call
return ret;
}
Aber, die Schleife wird nie zu Ende gehen...
Irgendwelche Ideen? Danke.
- Warum wollen Sie blockieren den asynchronen Aufruf in den ersten Platz? Dies macht keinen Sinn.
- weil es ein Aufruf zur Verfügung gestellt von Firefox und ich kann es nicht ändern. Es wird erwartet, dass in den meisten Millisekunden, ich will nicht zu überarbeiten alle meine anderen code, nur weil dieser.
- Kannst du die Funktion, dass Anrufe
getState()
? - Es ist zu lang, um hier gepostet werden und es wird erwartet, genannt zu werden aus vielen Orten. Also, ich erwarte, dass diese Funktion einen Wert zurückgeben.
- Hast du alle arbeiten Antwort für diese? Ich bin auch vor dem gleichen Problem und konnte keine passende Antwort bis jetzt. Einzige option, die ich hatte, ist nun die Umgestaltung des Codes an vielen Orten zu arbeiten, mit "async" - Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie suchen nach StratifiedJS, http://stratifiedjs.org
Es ermöglicht Ihnen, zu "inszenieren" Ihre async-code genau wie du geschrieben hast, VORSICHT, dass es "schreibt" wie synchroner code, es wird NICHT blockieren den rest der Anwendung.
Sie können es überall benutzen, indem das laden der apollo js-Bibliothek.
Dies ist, wie es Aussehen würde in Geschichteten JavaScript:
natürlich gibt es Module/Bibliotheken, die würde nur machen es so Aussehen:
http://onilabs.com/modules#http
Warum nicht einfach:
Was ist der Punkt von der wrapper-Funktion?
Asynchrone Funktionen funktionieren auf diese Weise. Wenn Sie möchten, blockieren Sie die Ausführung, dann mit einem synchronen Aufruf:
Die besten sein würde, um die Logik, die Sie haben möchten in der callback-Funktion. Gibt es irgendeinen Grund, warum Sie dies nicht tun können?
Könnten Sie
setInterval
zu prüfen, über das Ergebnis, aber das erfordert eine callback-Funktion, auch...was Sie versuchen zu tun, ist ein synchrone nennen, so ist es nicht eine gute Idee, es zu tun mit einer Funktion entwickelt, für asynchrone nennen.
Haben Sie hier eine Antwort : Wie kann ich mit jQuery ausführen, eine synchrone statt asynchrone Ajax-request?
Wenn ich missverstanden Ihre Frage, die man sich ansehen konnte, jQuery ajaxStop () - Ereignis - http://api.jquery.com/ajaxstop. Diese blockiert solange, bis alle ajax-Aufrufe abgeschlossen haben. Dies erfordert natürlich, dass alle asynchronen Aufrufe werden gemacht thru jQuery.