我有一个简单的脚本,只需从 Redis 列表中获取所有值并将它们打印到控制台。
var redis = require("redis"),
client = redis.createClient();
Bacon = require('baconjs');
Bacon.repeat(function(){
return Bacon.fromNodeCallback(
client, 'lpop', ['errors']
);
})
.takeWhile(function(val) {return val !== null;})
.fold(
[],
function(acc, next) {
acc.push(next); return acc;
}
).onValue(console.log);
程序打印正确的列表,但从未完成。我该如何解决这个问题?为什么会发生这种情况?
最佳答案
一个简单的解决方案是在 onValue 处理程序中调用 process.exit
。
).onValue(function(value) {
console.log(value)
process.exit(0)
})
编辑:您可以编写自定义重编辑源,该源在不再需要时关闭连接。
Bacon.fromBinder(function(sink) {
var client = redis.createClient()
sink(new Bacon.Next(client))
return function unsubscribe() {
client.quit()
}
}).flatMap(function(client) {
return Bacon.repeat(function(){
return Bacon.fromNodeCallback(
client, 'lpop', ['errors']
);
})
})
关于javascript - Baconjs 永无止境的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466448/