Redis
 sql >> Base de données >  >> NoSQL >> Redis

Problème de flux de contrôle avec node/redis et rappels ?

Je ne comprends pas pourquoi client.smembers et client.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.