簡體   English   中英

永無止境的Baconjs

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM