Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bacon.js“;“拆分”;包含数组的事件,每个元素包含多个事件_Javascript_Functional Programming_Reactive Programming_Bacon.js - Fatal编程技术网

Javascript Bacon.js“;“拆分”;包含数组的事件,每个元素包含多个事件

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

我最近发现了Bacon.js,一直在修补,但仍在努力解决一个问题

对于最近从AJAX请求返回的GitHub用户,我有一个事件流
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生成了一个新的流。