我是非常新的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
}
});
如果这些是基本/愚蠢的问题,请提前感谢,并对不起。
答案 0 :(得分:0)
第一个问题
如果达到超时,操作员将返回错误,该错误可以通过.catch
运算符
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;
第二个问题只是用map或mergemap替换magicSyntax取决于你想从这个操作返回什么。在块的旁边做if
是完全没问题的。
答案 1 :(得分:0)
1-你可以使用.do()来console.log你的回复。
{{1}}
2-你可以使用.mergeMap()