2

新しいサーバー (Ubuntu 13.04) に riak、node.js、riak-js を再インストールしましたが、突然、Riak-JS の db.keys() を使用してバケット内のキーのリストを取得すると、まったく返されません。

どのように失敗するかを示すテスト スニペットを次に示します。

var db = require('riak-js').getClient();

console.log('1');
db.save('bkt','x','1', function(err, data) {
    console.log('2');
    db.get('bkt','x', function(err, data) {
            console.log('3:'+data);
            db.keys('bkt', function(err, list) {
                    console.log('4');
                    for (key in list) { console.log('5:'+list[key]); }
            });
    });
});

出力は次のとおりです。

1

2

3:1

それ以外は何も出力しません。最新の Riak (1.4.2)、Node.js、Riak-JS (@latest) をインストールしました。

ありがとう!

4

1 に答える 1

4

ドキュメント によるとdb.keys()、結果をコールバックに渡す代わりに、イベント エミッターを返します。これは、キー リストが非常に長くなる可能性があるためです。

その場合、コールバックはエラーを処理するためだけに機能します。

したがって、コールバックを渡す代わりに、返された偶数エミッターを使用する必要があります。

db.keys('bkt', function(err) {                                            
        if (err) {                                                              
            //handle error                                                      
        }                                                                       
})                                                                              
    .on('keys', function(list) {                                                
        //handle the keys list                                                  
        //remember, keys may be delivered in batches                            
    })                                                                          
    .on('end', function() {                                                     
       //handle the end of keys stream                                          
    })                                                                          
    .start();
于 2013-09-11T17:43:53.440 に答える