Javascript Bacon.js“;“拆分”;包含数组的事件,每个元素包含多个事件
我最近发现了Bacon.js,一直在修补,但仍在努力解决一个问题 对于最近从AJAX请求返回的GitHub用户,我有一个事件流Javascript Bacon.js“;“拆分”;包含数组的事件,每个元素包含多个事件,javascript,functional-programming,reactive-programming,bacon.js,Javascript,Functional Programming,Reactive Programming,Bacon.js,我最近发现了Bacon.js,一直在修补,但仍在努力解决一个问题 对于最近从AJAX请求返回的GitHub用户,我有一个事件流results。每个结果事件都是一个用户对象数组,例如,[{id:1,login:'somlor'},{id:2,login:'raimohanska'},…] 问题:我想创建一个新的users事件流,它从结果事件中获取信息,并将实际用户对象作为单个事件返回。这可能吗 这是我的结果流代码,它按预期工作: // get some recent github users va
results
。每个结果事件都是一个用户对象数组,例如,[{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);
这不起作用。它为每个结果数组创建单个事件流。我希望它将每个结果
数组“拆分”为该数组中每个用户对象的新事件
// 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) });
如果我正确理解了这个问题,您需要使用.flatMap来创建流
results.flatMap(Bacon.fromArray).onValue(function(v){ console.log(v) });
太好了,谢谢你@jjuutila。然后我想,要将其转换为一个新流,我可以做var users=new Bacon.Bus()然后results.flatMap(Bacon.fromArray).onValue(函数(v){users.push(v);})代码>我认为您不需要额外的总线,因为flatMap生成了一个新的流。这很好,谢谢@jjuutila。然后我想,要将其转换为一个新流,我可以做var users=new Bacon.Bus()然后results.flatMap(Bacon.fromArray).onValue(函数(v){users.push(v);})代码>我认为您不需要额外的总线,因为flatMap生成了一个新的流。