valeur de retour d'une fonction de rappel en JavaScript ?


J'utilise node.js et la bibliothèque Translate. Puis-je faire quelque chose comme ça ? :


function traduce(text){
    translate.text(text,function(err,result){
        return result;
    });
}

Et ensuite utiliser le résultat ? Cela me renvoie toujours « undefined ». Y a-t-il un moyen d’utiliser le résultat sans faire ça ? : .


translate.text(text,function(err,result){
     // use result
     // some logic
});

Réponse #1

Vous n’exécutez pas la fonction, vous passez une référence à une fonction anonyme. Si vous voulez la valeur de retour, exécutez-la :

function traduce(text){
    translate.text(text, (function(err,result){
        return result;
    })());
}

Réponse #2

Il ne s'agit pas tant de savoir si vous pouvez le faire, mais si vous devriez le faire. Il s'agit vraiment de comprendre le code asynchrone, quelque chose que chaque introduction à node.js aborde en profondeur.

Translate utilise lui-même l'API de Google, ce qui fait une demande à un autre serveur. Si vous deviez attendre le résultat, ce serait une opération bloquante longue, ce qui est indésirable.