javascript - 使用 highland.js 执行一系列异步任务并引用原始流数据

标签 javascript node.js asynchronous stream highland.js

我有一个事件流:

var eventStream = _([{
  id: 1, foo: 'bar'
}, {
  id: 2, foo: 'baz'
}]);

对于流中的每个事件,我需要加载一个模型实例(我的 DAL 返回 promise ),然后在模型的每个实例上调用一个方法,将原始事件数据中的一些数据作为参数传递。

加载模型的实例并不太困难:

eventStream.map(function(data) {
    return getModelPromise(data.id);
}).map(_).merge(); // result is a stream of model instances

但是一旦有了模型,我就不知道如何在模型上调用方法并将 data.foo 传递给它。基本上,对于我需要做的每个实例:

modelInstance.doStuff(data.foo);

我玩过 fork 流,在 fork 上拉取模型,然后以不同的组合使用 zipinvoke,但我没有任何运气。使用 async 我可以通过正确使用闭包来非常简单地处理这个问题。我如何使用 highland.js 通过流来完成此操作?

最佳答案

最简单的做法可能是包装 getModelPromise,以便它返回一个解析为对象的 promise ,并将您的模型和数据作为属性,而不仅仅是您的模型。

或者,如果您不想使用 promise,您可以在 Highland 中使用:

var modelStream = eventStream.map(function (data) {
    return _(getModelPromise(data.id)).map(function (model) {
        return {data: data, model: model};
    });
}).parallel(10);

// then...
modelStream.map(function (x) {
    x.model.doStuff(x.data.foo);
});

压缩 modelStream 和观察到的 eventStream 版本也应该有效,但我通常更喜欢传递包含您需要的一切的对象。

关于javascript - 使用 highland.js 执行一系列异步任务并引用原始流数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25638527/

相关文章:

javascript - 使用 jQuery 在树形 View 中显示 HTML 结构

javascript - 在没有用户身份验证的情况下实现 Facebook 的 Graph API

node.js - 在 ReactJS 上使用 GET 调用下载文件

JavaScript - 仅评估 if 语句的第一部分

javascript - 如何向特定的discord channel 发送消息?

javascript - 跳转到网格面板中的行的问题

node.js - 如何在bluemix上配置socket.io粘性 session

node.js - Mongoose 不同并填充文档

javascript - 如何从异步调用返回响应?

javascript - Angular 无法通过 Promise 从 FS.readFile 获取数据