似乎我需要在已结束的流上执行操作,但不能使用.onEnd()
。让我们说我已经获得了一个URL列表,我需要根据XHR获取并注入我的应用程序。完成之后,我想继续做一些依赖于这些数据的事情,所以我真的无法并行完成。我现在正在尝试这样的事情:
var data = Bacon.fromArray(myArray).flatMap(function(url) {
... fetch per XHR and return ...
});
data.onValue(function() { ... do something with data ... });
Bacon.onValues(
otherValue,
data,
function(value, data) {
// I need to check whether data stream ended
// if (data.isEnd()) obviously doesn't work
}
)
这不仅不起作用,而且感觉不对。我该怎么做呢?
编辑:我设法破解了一起工作:data.mapEnd('we are done').filter(function(v) { return v === "we are done"; })
,但我认为这是一个非常肮脏的黑客。难道还有更纯粹的东西吗?
答案 0 :(得分:1)
我会在属性中存储第一个活动的状态(即已获取的URL),然后在属性达到“最终”状态时触发事件。
以下代码是否解决了您的问题?
var data = Bacon.fromArray(myArray).flatMap(fetchUrl)
var cumulativeResults = data.scan([], function(acc, result) { return acc.concat([result]) })
// a nicer implementation would ensure that every URL has indeed been fetched
var completed = cumulativeResults.filter(function(results) { return results.length == myArray.length });
completed.onValues(function(results) {
// proceed
});