如何解决错误的返回问题,使用可观察的捕获?
我想在捕获物中执行功能,在执行订阅之前进行一些验证。
预先感谢您,非常感谢您的关注。
错误发生在 -> .catch((e)=> {console.log(e)})
import { Injectable } from '@angular/core';
import { Headers, Http, ResponseOptions} from '@angular/http';
import { AuthHttp } from 'angular2-jwt';
import { MEAT_API } from '../app.api';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class CompareNfeService {
constructor(private http: AuthHttp) { }
envirArquivos(order): Observable<any> {
const headers = new Headers();
return this.http.post(`${MEAT_API}compare/arquivo`, order,
new ResponseOptions({headers: headers}))
.map(response => response.json())
.catch( (e) => {console.log(e)} );
}
}
错误
/xxxxxxx/application/src/app/compare/service.ts(28,17)中的错误 类型'(e:any)=> void'的参数不能分配给参数 type'(err:任何,捕获:可观察)=> observableInput&lt; {}>'。
键入'void'不能分配到type'observableInput&lt; {}>'。
如果要使用Observable
的catch()
,则需要在将错误响应委派给方法
Observable.throw()
方法
import { Injectable } from '@angular/core';
import { Headers, Http, ResponseOptions} from '@angular/http';
import { AuthHttp } from 'angular2-jwt';
import { MEAT_API } from '../app.api';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class CompareNfeService {
constructor(private http: AuthHttp) {}
envirArquivos(order): Observable < any > {
const headers = new Headers();
return this.http.post(`${MEAT_API}compare/arquivo`, order,
new ResponseOptions({
headers: headers
}))
.map(response => response.json())
.catch((e: any) => Observable.throw(this.errorHandler(e)));
}
errorHandler(error: any): void {
console.log(error)
}
}
使用Observable.throw()
为我工作
带有Angular 6和rxjs 6 Observable.throw()
,Observable.off()
已弃用,您需要使用throwError
ex:
return this.http.get('yoururl')
.pipe(
map(response => response.json()),
catchError((e: any) =>{
//do your processing here
return throwError(e);
}),
);
需要返回可观察的。
.catch(e => { console.log(e); return Observable.of(e); })
如果您想在捕获错误后停止管道,请执行此操作:
.catch(e => { console.log(e); return Observable.of(null); }).filter(e => !!e)
此捕获将误差转换为空瓦尔,然后过滤器不会让假值通过。但是,这将阻止管道的任何虚假价值,因此,如果您认为这些价值可能会通过并且想要它们,则需要更加明确/创意。
编辑:
停止管道的更好方法是做
.catch(e => Observable.empty())
您应该使用以下
return Observable.throw(error || 'Internal Server error');
使用以下行导入throw
操作员
import 'rxjs/add/observable/throw';