Não entendo por queclient.smembers
eclient.get
(pesquisas do Redis) precisam ser retornos de chamada em vez de simplesmente declarações - isso torna a vida muito complicada.
Isso é o que é o Node. (Tenho certeza de que este tópico foi discutido mais do que o suficiente aqui, veja outras perguntas, definitivamente está lá)
Como posso ter certeza de que todas as pesquisas foram realizadas antes de chamarsocket.broadcast
?
Isso é o que é
err
para na função de retorno de chamada. Este é meio que o padrão do Node - o primeiro parâmetro no retorno de chamada é o objeto de erro (null
se estiver tudo bem). Então, basta usar algo assim para ter certeza de que nenhum erro ocorreu:if (err) {
... // handle errors.
return // or not, it depends.
}
... // process results
Mas isso parece muito confuso.
Você vai se acostumar com isso. Na verdade, estou achando legal, quando o código está bem formatado e o projeto é estruturado de forma inteligente.
Outras formas são:
- Uso de bibliotecas para controlar o fluxo de código assíncrono (Async.js, Step.js etc.)
- Se o código estilo espaguete é o que você acha que é bagunça, defina algumas funções para processar os resultados e passe-os como parâmetros em vez de anônimos.