我有一个简单的脚本,该脚本仅从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']
    );
  })
})

关于javascript - 永无止境的Baconjs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30466448/

10-09 16:47