Angular4不同状态代码的变体?

时间:2017-12-13 07:25:15

标签: angular angular2-services angular2-http

我的Api为我提供了警告和错误的不同类型的状态代码。我必须根据回复显示不同的警报。

我正在调用这样的http服务:

service.ts

@Injectable()
export class TestService {

    getData () {
        return this.http.get('publi/api/list')
            .map((response: Response) => response.json())
            .catch(this.handleError);
    }

    public handleError(error: any): Observable<any> {
        console.log(error, 'error!!!!!!');
        return Observable.throw(error.json() || 'server error');
    }
}

component.ts

export class TestComponent implements OnInit {

    constructor(private testService: TestService) { }

    ngOnInit() {
        this.getAllList();
    }

    getAllList() {
        this.testService.getData()
            .subscribe(res => this.sucessList(res),
            err => this.errList(err))
    }

    sucessList(res) {
        console.log(res, 'sucessApprovalsPermissions');
    }

    // Here I need varions
    errList(err) {
        console.log(err, 'err');
        this.errApprovalPermissions = err.message.message;
    }
}

2 个答案:

答案 0 :(得分:1)

如果我是你,我会做什么,是一个拦截器。拦截器是在向您提供请求数据之前调用的服务。

例如,这是一个错误拦截器:

providers: [
  { provide: HTTP_INTERCEPTORS, useClass: ErrorHandlerService, multi: true }
]

然后您需要在模块中提供它,如下所示:

var listOfFilesUploaded = [];
function uploadToServer(recordRTC, callback) {
var blob = recordRTC instanceof Blob ? recordRTC : recordRTC.blob;
var fileType = blob.type.split('/')[0] || 'audio';
var fileName = (Math.random() * 1000).toString().replace('.', '');

if (fileType === 'audio') {
    fileName += '.' + (!!navigator.mozGetUserMedia ? 'ogg' : 'wav');
} else {
    fileName += '.webm';
}
// create FormData
var formData = new FormData();
formData.append(fileType + '-filename', fileName);
formData.append(fileType + '-blob', blob);

callback('Uploading ' + fileType + ' recording to server.');

makeXMLHttpRequest('save.php', formData, function(progress) {
    if (progress !== 'upload-ended') {
        callback(progress);
        return;
    }

现在你需要做的就是处理捕获中的错误代码,你很高兴!

答案 1 :(得分:0)

你可以使用像这样的订阅方法

 getAllList() {
  this.testService.getData().subscribe(response => {
    if (response.status === 200 ) {
     // Write your own code here
    }
    else if (response.status === 203) {
     // your own code
    }
   }, error => {
   if (error) {
     // your own code
   }
  });
 }
通过这种方式,您可以获得不同的状态代码。

但是如果你想捕捉错误的话!那么我建议你按照这个:How to deal with http status codes other than 200 in Angular 2