如何在可观察的地图中抛出Error(rxjs6,ng6)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在可观察的地图中抛出Error(rxjs6,ng6)相关的知识,希望对你有一定的参考价值。
我的问题类似于这个qazxsw poi,但是我在rxjs 6的角度6,我猜所有都改变了;)
我想知道,我如何将一个observable映射中的Error-Object传播给订阅OnError Part。我总是在OnNext Part中。
这是我到目前为止:
在ng-component中,我可能有以下方法调用
How to throw error from RxJS map operator (angular)
被调用的服务方法如下:
[...]
this.dataStreamService.execCall({ method : 'order_list',params : {}})
.subscribe( r => {
// here r provides the result data from http call
console.log("execCall result", r);
}, err => {
// HERE the "MAP ERROR OCCURED" Error should be occured as well,
// but in doesn't
console.log("execCall error",err);
});
[...]
最后问题:如何管理,管道“地图”中的“throwError”被传播到订阅“err => {...}”。
实际行为:
execCall(dataStreamCall: DataStreamCall): Observable<DataStreamResult> {
let apiURL = '<some API-URL>';
let params = dataStreamCall.params;
// do HTTP request (this.http calls an extra service handler which wraps
// the angular httpClient and the API errors there
// There is NO Problem with that part :)
let apiResult = this.http.post(apiURL, params);
// Build a new Observable from type "DataStreamResult"
let dsr : Observable<DataStreamResult> = apiResult
.pipe(
map( httpresult => {
if (httpresult['status'] == false){
// the http call was basically successful,
// but state in data is false
// *** THIS IS NOT PROPAGATE TO SUBSCRIBE OnERROR ***
throwError({'msg' : 'MAP ERROR OCCURED'});
// also tried as alternative
return throwError({'msg' : 'MAP ERROR OCCURED'});
} else {
// here the http call was successful
let d = new DataStreamResult();
d.result = httpresult;
return d;
}
}),
catchError( err => {
// error is bubble up from http request handler
return throwError(err);
})
);
return dsr;
}
我最后在订阅OnNext Part与throwError({..})
如果我使用:
r = undefined
我也最终订阅了OnNext Part,其中return throwError({..})
是throwError-Observable
Thx提前最好的问候
r
将返回一个可观察的,当订阅时,将影响throwError({'msg' : 'MAP ERROR OCCURED'})
通知。也就是说,它将调用订户的error
方法。
在您的代码段中,您可以调用error
并忽略该值。或者从传递给throwError
运算符的项目函数返回其返回值。
两者都不会影响错误。
在第一种情况下没有订户,因为忽略了返回值。并且,在第二种情况下,没有订阅者,因为map
运算符不订阅从项目函数接收的内容 - map
运算符的项目函数可以返回任何内容;它不必返回一个可观察的。
要在map
中抛出错误,请使用:
map
以上是关于如何在可观察的地图中抛出Error(rxjs6,ng6)的主要内容,如果未能解决你的问题,请参考以下文章
从服务器方法中抛出 Meteor.Error 会导致脚本退出
如何解决 Angular 单元测试错误:“在 afterAll\n[object ErrorEvent] 中抛出了一个错误”
React SecureServer运行但在浏览器中抛出SSL_ERROR_NO_CYPHER_OVERLAP