Je ne comprends pas pourquoi
client.smembers
etclient.get
(Les recherches Redis) doivent être des rappels plutôt que de simples déclarations - cela rend la vie très compliquée.
C'est ce qu'est Node. (Je suis presque sûr que ce sujet a été discuté plus qu'assez de fois ici, regardez à travers d'autres questions, c'est définitivement là)
Comment puis-je être sûr que toutes les recherches ont été effectuées avant d'appeler
socket.broadcast
?
C'est ce qui est err
pour dans la fonction de rappel. C'est un peu la norme de Node - le premier paramètre du rappel est l'objet d'erreur (null
si tout va bien). Donc, utilisez simplement quelque chose comme ceci pour vous assurer qu'aucune erreur ne s'est produite :
if (err) {
... // handle errors.
return // or not, it depends.
}
... // process results
Mais cela semble très désordonné.
Tu t'y habitueras. En fait, je trouve cela agréable, lorsque le code est bien formaté et que le projet est intelligemment structuré.
Les autres moyens sont :
- Utilisation de bibliothèques pour contrôler le flux de code asynchrone (Async.js, Step.js, etc.)
- Si vous pensez que le code de style spaghetti est un gâchis, définissez des fonctions pour traiter les résultats et transmettez-les en tant que paramètres au lieu d'anonymes.