Bacon.js“splitting"包含数组的事件,每个元素包含多个事件

Bacon.js "splitting" an event containing an array into multiple events for each element

本文关键字:事件 包含多 数组 元素 包含 js splitting quot Bacon      更新时间:2023-09-26

我最近发现了Bacon.js,一直在修补,但遇到了一个问题。

我有一个事件流results最近GitHub用户从AJAX请求返回。每个结果事件都是一个用户对象数组,例如,[{ id: 1, login: 'somlor' }, { id: 2, login: 'raimohanska' }, ...]

问题:我想创建一个新的users事件流,从结果事件馈送并返回实际用户对象作为单个事件。这可能吗?

这是我的代码的结果流,这是按预期工作:

// get some recent github users
var ajaxStream = function() {
  var randomOffset = Math.floor(Math.random() * 500);
  var url = 'https://api.github.com/users?since=' + randomOffset;
  return Bacon.fromPromise($.ajax(url));
}
// refresh click stream, start as true to trigger initial ajax call
var refresh = $('a.refresh').asEventStream('click')
                            .map(true)
                            .startWith(true);
// latest results stream. each event is an array of user objects.
var results = refresh.flatMapLatest(ajaxStream);

这不能工作。为每个results数组创建单个事件流。我希望它将每个results数组"拆分"为该数组中的每个用户对象的新事件。

// stream of individual users created from each result event array
var users = results.map(function(e) { return new Bacon.fromArray(e); });

任何想法?

谢谢,
肖恩

更新:
这就是我要找的:

var users = results.flatMap(Bacon.fromArray);

如果我正确理解了这个问题,您需要使用. flatmap来创建流。

results.flatMap(Bacon.fromArray).onValue(function(v){ console.log(v) });