Nie rozumiem, dlaczego client.smembers
i client.get
(wyszukiwania Redis) muszą być wywołaniami zwrotnymi, a nie tylko instrukcjami - to bardzo komplikuje życie.
Tym właśnie jest Węzeł. (Jestem prawie pewien, że ten temat był omawiany tutaj wystarczająco dużo razy, przejrzyj inne pytania, na pewno tam jest)
Jak mogę się upewnić, że wszystkie wyszukiwania zostały wykonane przed wywołaniem socket.broadcast
?
To właśnie jest err
w funkcji zwrotnej. Jest to swego rodzaju standard Node'a - pierwszym parametrem w wywołaniu zwrotnym jest obiekt błędu (null
jeśli wszystko w porządku). Więc po prostu użyj czegoś takiego, aby upewnić się, że nie wystąpiły żadne błędy:
if (err) {
... // handle errors.
return // or not, it depends.
}
... // process results
Ale wydaje się to bardzo niechlujne.
Przyzwyczaisz się. Właściwie uważam to za miłe, gdy kod jest dobrze sformatowany, a projekt ma sprytną strukturę.
Inne sposoby to:
- Korzystanie z bibliotek do kontrolowania przepływu kodu asynchronicznego (Async.js, Step.js itp.)
- Jeśli kod w stylu spaghetti jest tym, co uważasz za bałagan, zdefiniuj kilka funkcji do przetwarzania wyników i przekaż je jako parametry zamiast anonimowych.