Vous semblez confondre les entrées/sorties asynchrones avec les fonctions asynchrones. node.js utilise des entrées/sorties asynchrones non bloquantes parce que les entrées/sorties non bloquantes sont meilleures. La meilleure façon de le comprendre est de regarder quelques vidéos de Ryan Dahl.
Comment écrire des fonctions asynchrones pour Node ?
Il suffit d'écrire des fonctions normales, la seule différence étant qu'elles ne sont pas exécutées immédiatement mais transmises en tant que callbacks.
Comment mettre en œuvre correctement la gestion des événements d'erreur
Généralement, les API vous donnent un callback avec un err comme premier argument. Par exemple
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
C'est un modèle commun.
Un autre modèle commun est on('error')
. Par exemple
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
Editar:
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
La fonction ci-dessus, lorsqu'elle est appelée comme
async_function(42, function(val) {
console.log(val)
});
console.log(43);
Imprimera 42
à la console de manière asynchrone. En particulier process.nextTick
se déclenche une fois que la pile d'appels de l'eventloop actuel est vide. Cette pile d'appels est vide après async_function
y console.log(43)
ont couru. Nous imprimons donc 43 suivi de 42.
Vous devriez probablement faire quelques lectures sur la boucle d'événement.
14 votes
C'est pour ça que je demande. Je ne vois pas en quoi ces fonctions sont différentes.
0 votes
Je vous recommande de regarder
setTimeout
ysetInterval
dans votre navigateur préféré et jouez avec eux également. Vous pouvez aussi utiliser des rappels ajax (ce qui se rapproche probablement le plus de l'expérience des nœuds), ou des écouteurs d'événements pour des choses qui vous sont familières, comme les événements de clic et de chargement. Le modèle asynchrone existe déjà dans le navigateur, et c'est exactement la même chose dans node.0 votes
@davin - Je suppose que je ne comprends pas bien le modèle asynchrone alors.
0 votes
@Kriem, j'ai répondu à quelque chose hier qui pourrait vous aider : stackoverflow.com/questions/6883648/ Ce n'est pas une réponse à votre question, mais c'est sur le sujet. Essayez de lire la question et la réponse et jouez avec le code pour essayer de comprendre ce qui se passe.
0 votes
@davin - Merci ! Lecture intéressante. L'asynchronisme avec ses fonctions de callback me laisse vraiment perplexe.
2 votes
@Raynos Quelle est la définition de "fonction asynchrone" ?
0 votes
Je pensais que tout ce qui utilise un socket (base de données, flux ) rend la fonction asynchrone, mais j'exclue peut-être d'autres cas où la fonction se comporte également de manière asynchrone.
0 votes
howtonode.org/understanding-process-next-tick
0 votes
Je vois beaucoup d'exemples utilisant setTimeout ou setInterval, mais je ne comprends pas pourquoi ils sont utilisés. Sont-ils utilisés pour simuler quelque chose, comme un exercice académique pour comprendre le fonctionnement des transactions asynchrones sans cas d'utilisation réel ou clair, ou sont-ils fondamentalement nécessaires pour toute fonction asynchrone indépendamment du cas d'utilisation et/ou des exigences de l'entreprise ?