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 回答