[英]Never ending stream with Baconjs
我有一個簡單的腳本,它僅從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)
})
編輯:您可以編寫一個自定義的redit源,當不再需要該連接時,它將關閉連接。
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']
);
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.