javascript - Baconjs 永无止境的流

标签 javascript node.js redis reactive-programming bacon.js

我有一个简单的脚本,只需从 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/

相关文章:

javascript - 使用 JQuery 和 Javascript 在 Chrome 扩展程序中未触发事件

javascript - 最大和最小数字 Javascript 错误

javascript - querySelector 不适用于 puppeteer 中的子元素

c++ - 如何在 C++ 框架中使用 C 动态库?

javascript - Redis 在某些操作系统上将字符串保存为缓冲区,而不是其他操作系统?

javascript - 如何在javascript中对多维数组进行排序

javascript - 从 JQuery 变量中删除所有标签元素

javascript - 当 HTML 元素的内容完全加载时是否有一个事件?

node.js - 数据库不是使用 Mongoose 和 Node.js 创建的

hash - Redid 3.0集群数据