La programmation asynchrone en JavaScript sans désordre rappels

Je veux tourner asynchrone fonction de la machine synchrone.

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());​

Voir en action

Le résultat sera toujours " snap!', parce que $.getJSON courir après fetch() est fait.

Ma première idée était:

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;
  }
}

Il ne fonctionne pas et aussi souffler le navigateur.

J'ai lu sur les générateurs et les itérateurs en JS 1.7, mais je n'ai aucune idée de comment l'appliquer à mon problème.

Cette question n'est pas vraiment à propos de jQuery. Au lieu de $.getJSON pourrait être n'importe quel autre fonctions asynchrones.

Possible (probable?) double - voir stackoverflow.com/questions/1455870/....
Jeff, je ne le pense pas. J'utilise JSONP d'appel, qui a toujours synchrone.
JSONP est seulement synchrone lorsque analysée dans le cadre du document HTML. Si elle est ajoutée à la page en utilisant le DOM, c'est asynchrone.
Oups, je voulais dire ", qui sont toujours asynchrone".

OriginalL'auteur NVI | 2010-02-08