可观察的事件过滤器和超时

时间:2018-05-10 04:54:54

标签: filter timeout rxjs observable

我是非常新的Rxjs可观察并需要两个问题的帮助。 我有这段代码:

const resultPromise = this.service.data
            .filter(response => data.Id === 'dataResponse')
            .filter((response: dataResponseMessage) => response.Values.Success) 
            .take(1)
            .timeout(timeoutInSeconds)
            .map((response: dataResponseMessage) => response.Values.Token)
            .toPromise();

我有以下基本问题:

1-如何更改.timeout(timeoutInSeconds)以添加消息,以便我可以稍后调试/记录哪个响应失败?我查看了rxjs中的.timeout语法,并没有看到包含任何消息的选项。

2 - 我知道.filter((response:dataResponseMessage)=&gt; response.Values.Success)将过滤到带有response.Values.Success的响应,但是有一种语法,我可以这样做一个observable:< / p>

const resultPromise = this.service.data
                    .filter(response => data.Id === 'dataResponse')
                    .magicSyntax((response: dataResponseMessage) => {
                        if (response.Values.Success) {
                            // do something
                        } else {
                            // do something else
                        }
                    });

如果这些是基本/愚蠢的问题,请提前感谢,并对不起。

2 个答案:

答案 0 :(得分:0)

第一个问题 如果达到超时,操作员将返回错误,该错误可以通过.catch运算符

捕获

&#13;
&#13;
const resultPromise = this.service.data
            .filter(response => data.Id === 'dataResponse')
            .filter((response: dataResponseMessage) => response.Values.Success) 
            .take(1)
            .timeout(timeoutInSeconds)
            .catch(e=>{
              //do your timeout operation here ... 
              return Observable.Of(e)
            })
            .map((response: dataResponseMessage) => response.Values.Token)
            .toPromise();
&#13;
&#13;
&#13;

第二个问题只是用map或mergemap替换magicSyntax取决于你想从这个操作返回什么。在块的旁边做if是完全没问题的。

答案 1 :(得分:0)

1-你可以使用.do()来console.log你的回复。

{{1}}

2-你可以使用.mergeMap()