首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用highland.js执行异步任务,并引用原始流数据

使用highland.js执行异步任务,并引用原始流数据
EN

Stack Overflow用户
提问于 2014-09-03 07:22:37
回答 1查看 1.7K关注 0票数 2

我有一连串的事件:

代码语言:javascript
复制
var eventStream = _([{
  id: 1, foo: 'bar'
}, {
  id: 2, foo: 'baz'
}]);

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

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

代码语言:javascript
复制
eventStream.map(function(data) {
    return getModelPromise(data.id);
}).map(_).merge(); // result is a stream of model instances

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

代码语言:javascript
复制
modelInstance.doStuff(data.foo);

我玩过分叉流,在叉子上拉模型,然后在不同的组合中使用zipinvoke,但是我没有任何运气。有了异步,我可以很简单地通过正确的闭包用户来处理这个问题。如何使用highland.js使用流来完成这一任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 13:26:58

最简单的方法可能是包装getModelPromise,这样它就可以将解析结果作为属性返回给对象,而不仅仅是模型。

或者,如果你不想使用承诺,你可以在高地实现它:

代码语言:javascript
复制
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版本也应该有效,但我通常更喜欢传递包含所需所有内容的对象。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25638527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档