我有一个产生许多事件的流。我只想把第一个事件激活某些事情。
我的第一个想法是使用stream.first()。subscribe(activateStuff)来实现它。问题是activateStuff处理程序被调用两次。但是如果我使用onValue而不是subscribe,它将被调用一次(如预期的那样)。
有趣的是,如果我删除了第一个()部分,并且我只使用了一个被触发的事件的订阅,它将表现得像onValue(它们都只调用一次activateStuff)。
let stream1 = new Bacon.Bus();
stream1.first().onValue(() => console.log("from stream1"));
stream1.push({});
// it will print from stream1 once
let stream2 = new Bacon.Bus();
stream2.first().subscribe(() => console.log("from stream2"));
stream2.push({});
// it will print from stream2 twice. Why !?
let stream3 = new Bacon.Bus();
stream3.onValue(() => console.log("from stream3"));
stream3.push({});
// it will print from stream3 once
let stream4 = new Bacon.Bus();
stream4.subscribe(() => console.log("from stream4"));
stream4.push({});
// it will print from stream4 once
使用first()然后使用相同的事件流subscribe()有什么问题?
您可以在此处使用代码:https://fiddle.jshell.net/np0r80fn/
答案 0 :(得分:0)
let currentBundle = Bundle.allBundles.filter() { $0.bundlePath.hasSuffix(".xctest") }.first!
let realBundle = Bundle(path: "\(currentBundle.bundlePath)/../../../../Tests/MyProjectTests/Resources")
方法将使用Event(https://github.com/baconjs/bacon.js/#event)对象调用您的方法,而不仅仅是新值。您将获得2个回调:一个用于subscribe
事件中包含的实际值,另一个用于Next
事件。如果删除End
部分,结果流将不会结束;这就是为什么你在这种情况下只得到一次回调。