質問

私はJavaScriptに新しい、まだ非同期機能に精通していません...

Node.jsを操作しているチャットサーバーを作成しています。彼の「ユーザー名」を別の配列に保存し、それをJSONレスポンスに変換してから送信します。

socket.on('getListConnected', function(msg){
                        var clients = namespace.clients();//get all client in that nsp
                        var usernames = Array() ;//init array

                        for(i in clients)//for each clients
                        {
                           clients[i].get("username", function(value){
                               usernames.push(value);
                            });
                        }
                       socket.emit('getListConnected',JSON.stringify(usernames));//send
                    });
.

このコードの問題はclient.get()メソッドでは非同期魔法のものです。

塗りつぶすまでユーザー名を待つ方法、あるいはそれが終了するまでループを待機する方法は?

役に立ちましたか?

解決

ミドルウェアを使うことができます。すべてのユーザー名が得られたかどうかをチェックすることができます。

のようなもの
socket.on('getListConnected', function (msg) {
    var clients   = namespace.clients();
    var usernames =  [];
    var counter1  =  0;
    var counter2  =  0;

    for (i in clients) {

        counter1++; // number of clients

        clients[i].get("username", function (value) {
            usernames.push(value);
            counter2++; // number of clients added to array

            if (counter1 === counter2) {
                socket.emit('getListConnected', JSON.stringify(usernames));
            }

        });
    }

});
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top