Error handling 如何在可观测地图(rxjs6,ng6)内投掷者

Error handling 如何在可观测地图(rxjs6,ng6)内投掷者,error-handling,observable,angular6,rxjs6,Error Handling,Observable,Angular6,Rxjs6,我的问题与此类似,但我在使用rxjs6的angular6上,我想一切都变了;) 我想知道,我如何将一个可观测对象映射中的错误对象传播到subscribe OnError部分。我总是在下一部分结束 以下是我到目前为止的情况: 在ng组件中,我可能有以下方法调用 [...] this.dataStreamService.execCall({ method : 'order_list',params : {}}) .subscribe( r => { // here r p

我的问题与此类似,但我在使用rxjs6的angular6上,我想一切都变了;)

我想知道,我如何将一个可观测对象映射中的错误对象传播到subscribe OnError部分。我总是在下一部分结束

以下是我到目前为止的情况:

在ng组件中,我可能有以下方法调用

[...]
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);

    });
[...]
被调用的服务方法如下所示:

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;
}
我以
r=undefined

如果我使用:

return throwError({..})
我还进入了subscribe OnNext部分,其中
r
是可以观察到的投掷者

提前Thx 向投手致意({'msg':'MAP ERROR occurrented'})将返回一个可观察值,当订阅时,该值将影响
错误通知。也就是说,它将调用订阅者的
error
方法

在代码段中,可以调用
throwError
并忽略该值。或者从传递给
map
操作符的项目函数返回其返回值

两者都不会产生错误

在第一种情况下没有订户,因为返回值被忽略。并且,在第二种情况下,没有订户,因为
map
运营商没有订阅它从项目功能收到的内容,
map
运营商的项目功能可以返回任何内容;它不必返回一个可观察的

要在映射中抛出错误,请使用:

throw {'msg' : 'MAP ERROR OCCURED'};

谢谢@cartant你让我开心。现在我更好地理解了这一点,
throw
语句只是做了我想做的:)
throw {'msg' : 'MAP ERROR OCCURED'};