为什么在这种情况下“最终”在 RxJS 中不起作用
Why doesn't `finally` work in this case in RxJS?
这不会打印"拖动结束":
mouseDrags.forEach(drag => {
console.log('drag start');
drag.finally(_ => console.log('drag end'));
drag.forEach(doSomething);
});
但这打印了"拖拽结束":
mouseDrags.forEach(drag => {
console.log('drag start');
drag.finally(_ => console.log('drag end')).forEach(_=>_);
drag.forEach(doSomething);
});
为什么 forEach 会有所作为?
这是因为.finally()
返回了您需要订阅的另一个可观察量。 默认情况下,Observable
是惰性的,因此在订阅之前它们不会开始发出。
所以你可以做
mouseDrags.forEach(drag => {
console.log('drag start');
drag.finally(_ => console.log('drag end')).forEach(doSomething);
});
甚至更好
mouseDrags.flatMap(drag => {
console.log('drag start');
return drag.finally(_ => console.log('drag end'))
}).forEach(doSomething);
drag
的类型是什么?如果它是可观察量,则需要订阅它。 finally
不订阅,但forEach
订阅。您可以通过调用 drag.finally(_ => console.log('x')).subscribe()
来测试它。那也应该打印出来。
forEach 实际上是订阅的别名,因此使用任何一个都可以。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- 为什么在这种情况下“最终”在 RxJS 中不起作用
- Rxjs merge() 不起作用
- 使用Rxjs实现的拖放不起作用