client.smembers
の理由がわかりません およびclient.get
(Redisルックアップ)は、単なるステートメントではなくコールバックである必要があります。これにより、作業が非常に複雑になります。
それがノードです。 (このトピックはここで十分な回数議論されたと確信しています。他の質問に目を通します。間違いなくそこにあります)
socket.broadcast
を呼び出す前に、すべてのルックアップが実行されたことを確認するにはどうすればよいですか。 ?
それがerr
です コールバック関数で。これはちょっとノードの標準です-コールバックの最初のパラメータはエラーオブジェクト(null
すべてがうまくいけば)。したがって、次のようなものを使用して、エラーが発生していないことを確認してください。
if (err) {
... // handle errors.
return // or not, it depends.
}
... // process results
しかし、これは非常に厄介なようです。
あなたはそれになれるようになる。コードが適切にフォーマットされ、プロジェクトが巧妙に構造化されている場合、私は実際にそれが素晴らしいと感じています。
その他の方法は次のとおりです。
- ライブラリを使用して非同期コードフロー(Async.js、Step.jsなど)を制御する
- スパゲッティスタイルのコードが混乱していると思われる場合は、結果を処理する関数をいくつか定義し、匿名ではなくパラメーターとして渡します。