如果另一个事件使用Rx触发,则忽略事件

时间:2016-03-28 08:35:26

标签: c# .net linq event-handling system.reactive

简而言之

寻找实现方法

  

observableOne.SkipIf(observableTwoFiresWithinPeriod)

解释

  • 假设我正在观察穿过门的人(walkins Observable
  • 我还可以判断他们是否有电话(phoneWalkins Observable)。
  • 现在我想观察另一块没有电话的人走过门口的馅饼(nonPhoneWalkins Observable

鉴于我有walkinsphoneWalkins子集可用作流,nonPhoneWalkins应为walkinsphoneWalkins除外。

  • 如何使用Reactive Extensions实现该功能?
  • 请注意,如果发现此人携带电话,phoneWalkins会在walkins之后发出信号

2 个答案:

答案 0 :(得分:1)

这是我的简单尝试:

angular.module('appName').directive('profileedit',function(){
return{
    restrict: 'E',
    templateUrl: 'client/modules/profile-edit/profile-edit.html',
    controllerAs: 'editProfileController',
    controller: function($scope,$reactive){
        $reactive(this).attach($scope);
        this.helpers({
            cropImgSrc: function(){
                return ' ';
            }
        });
        this.addAvatar = function(files){
            if (files.length > 0) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    $scope.$apply(function(){
                        this.cropImgSrc = e.target.result;
                    });
                };
                reader.readAsDataURL(files[0]);
            }
            else {
                this.cropImgSrc = undefined;
            }
        };
    }
}

答案 1 :(得分:1)

感谢@supertopi指出另一个相关问题,并且@LeeCampbell的答案移植到此上下文应该有效:

nonPhoneWalkins = 
    walkins.SelectMany
    (walkin => 
        phoneWalkins.Take(1).Select(phoneWalkin => false)
        .Amb(
            Observable.Timer(TimeSpan.FromSeconds(1)).Select(l => true)
            )
    )
    .Where(nonPhoneWalkin => nonPhoneWalkin);