我在新的服务器(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)。
谢谢!
答案 0 :(得分:4)
根据documentation 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();