Node.js 里亚克JS不';不回应';钥匙';功能

Node.js 里亚克JS不';不回应';钥匙';功能,node.js,riak,Node.js,Riak,我在一台新服务器(Ubuntu13.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.ge

我在一台新服务器(Ubuntu13.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)

谢谢

根据
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();
根据
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();

谢谢——这样做更有意义,但我有一个旧版本的工作代码,按照上面描述的方式工作。我不知道它变了。再次感谢。有什么特别的事情必须在“结束”时做吗?当riak.keys终止时,我似乎将字符串“null”记录到控制台,不确定如何避免它。@matt我们需要您向我们展示一些代码,最好是在它自己的问题中。谢谢——这样做更有意义,但我在一个旧版本下使用了上述工作方式的工作代码。我不知道它变了。再次感谢。有什么特别的事情必须在“结束”时做吗?当riak.keys终止时,我似乎会将字符串“null”记录到控制台,不知道如何避免它。@matt我们需要您向我们展示一些代码,最好是在它自己的问题中