Ich möchte eine asynchrone Funktion auf die synchrone zu schalten.Asynchrone Programmierung in JavaScript ohne unordentliche Rückrufe
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
return result;
}
document.write(fetch());
Das Ergebnis wird es immer sein 'Snap!', Weil $.getJSON
Lauf nach fetch()
erfolgt.
Meine erste Idee war:
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
while (true) { if (result != 'snap!') return result; }
}
Es ist nicht und auch den Browser abblasen funktioniert.
Ich lese über generators and iterators in JS 1.7, aber ich habe keine Ahnung, wie man es auf mein Problem anwenden.
Diese Frage ist nicht wirklich über jQuery. Anstelle von $.getJSON könnte irgendeine andere asynchrone Funktion sein.
möglich (wahrscheinlich?) Duplizieren - siehe http://stackoverflow.com/questions/1455870/jquery-wait-for-function-to-complete:
Sie könnte so etwas wie (ungetestet) schreiben Weiterverarbeitung –
Jeff, ich denke nicht. Ich benutze JSONP Anruf, der immer synchron ist. – NVI
@NV: JSONP ist nur synchron, wenn als Teil des HTML-Dokuments geparst wird. Wenn es mit dem DOM zur Seite hinzugefügt wird, ist es asynchron. –