Je suis assez nouveau pour le style de callback de la programmation en javascript. Existe-t-il un moyen pour de forcer le code à attendre la fin d'un appel de fonction via un rappel? Laissez-moi vous expliquer. La fonction suivante prend un nombre et renvoie un résultat en fonction de celui-ci.Pause jusqu'à l'appel d'un rappel, en Javascript
function get_expensive_thing(n) {
return fetch_from_disk(n);
}
Jusqu'ici, assez facile. Mais que dois-je faire lorsque fetch_from_disk
renvoie son résultat via un rappel? comme ceci:
function get_expensive_thing(n) {
fetch_from_disk(n, function(answer) {
return answer; // Does not work
});
}
La précède ne fonctionne pas parce que le return
est dans le cadre de la fonction anonyme, plutôt que la fonction get_expensive_thing
.
Il existe deux "solutions" possibles, mais les deux sont inadéquates. On est à factoriser get_expensive_thing
de se répondre à un rappel:
function get_expensive_thing(n, callback) {
fetch_from_disk(n, function(answer) {
callback(answer);
});
}
L'autre est recoder fetch_from_disk
, mais ce n'est pas une option.
Comment pouvons-nous obtenir le résultat souhaité tout en gardant le comportement souhaité de get_expensive_thing
- à savoir, attendez que fetch_from_disk
appelle le rappel, puis renvoyer cette réponse?
Même si vous pouvez attendre, vous demandez un navigateur non réactif en faisant cela. – JohnFx
C'est assez juste. Mon but ici était d'établir avec certitude qu'il est réellement * impossible * de créer une fonction qui retourne une valeur obtenue par un callback. – jameshfisher