1

次のエクスプレスnode.jsアプリがあります。「redis」npm パッケージを使用しています。

app.get("/test",function(req,res){
    var data = [];
    client.HGETALL("receipts",function(err,obj){
        for(var id in obj){
            data.push(JSON.parse(obj[id]));
        }
    });
    console.log(data);
    res.json(data);
});

app.listen(3000);

コードはエラーなしで実行されます。ただし、data変数は[]ブラウザーに返されるときです。 ブラウザ

奇妙な点は、コマンド ラインから同じ redis コマンドを実行すると、配列が作成されることです。

ここに画像の説明を入力

ここで何が起こっているのか誰か教えてもらえますか?

4

1 に答える 1

10

コードは非同期です。渡したコールバックは、が実行されるまで実行れませんconsole.log。試す:

app.get("/test",function(req,res){
    var data = [];
    client.HGETALL("receipts",function(err,obj){
        for(var id in obj){
            data.push(JSON.parse(obj[id]));
        }
        console.log(data);
        res.json(data);
    });
});
于 2012-04-04T22:46:42.263 に答える