0

以下の関数を呼び出して、ejs のビューでデータを表示すると。サーバー起動後の初回ロード時はデータがありません。ただし、2回目のロードからデータを取得できます。サーバーの起動後の最初のロード時にリストが空になるだけです。この問題は何ですか?データベースとしてredisを使用しています。私もpostgreSQLの使用で同じエラーに直面し、解決しました

client.on('end', function(){
   fn(_datas);
}. 

しかし、今そのコードを使用することはできません。

getAllDatas = function(fn){
    client.smembers('db:contact:all', function(err, _uid){
        if(err)
            throw err;
        else{
            for(var i = 0; i < _uid.length; i++){
                    client.hgetall('db:contact:' + _uid[i], function(err, reply){
                    if(err)
                        throw err;
                    else{
                        _datas.push(reply);
                    }
                }); 
            }
        }
    });
    fn(_datas);
    _datas = [];

};
4

1 に答える 1

0

setTimeout関数を使用して、以下のコードのように解決しました。私はそれが素晴らしい答えではないことを知っていますが、今では私のエラーを実際に解決できます。

getAllDatas = function(fn){
    var _datas = [];
    client.smembers('db:contact:all', function(err, _uid){
        if(err)
            throw err;
        else{
            for(var i = 0; i < _uid.length; i++){
                    client.hgetall('db:contact:' + _uid[i], function(err, reply){
                    if(err)
                        throw err;
                    else{
                        _datas.push(reply);
                    }
                }); 
            }
        }
    });
    setTimeout(function(){
       fn(_datas);
    }, 100);

};
于 2013-11-22T04:58:05.490 に答える