Fil*_*ero 4 observable angular
在我的 Angular 2 应用程序中,我有一个带有http.get返回 Observable 方法的服务。
活动.service.ts
\n\npublic getCampaign(campaignId: string): Observable<Campaign> {\n return this.http.get(this.campaignsUrl + \'/\' + campaignId, options)\n .map(this.extractData)\n .catch(this.handleError);\n}\n\nprivate extractData(res: Response) {\n let body = res.json();\n return body.data || body || {};\n}\n\nprivate handleError(error: Response | any) {\n // In a real world app, we might use a remote logging infrastructure\n let errMsg: string;\n if (error instanceof Response) {\n const body = error.json() || \'\';\n const err = body.error || JSON.stringify(body);\n errMsg = `${error.status} - ${error.statusText || \'\'} ${err}`;\n } else {\n errMsg = error.message ? error.message : error.toString();\n }\n console.error(errMsg);\n return Observable.throw(errMsg);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后我在我的组件中调用它,如下所示:
\n\n活动.组件.ts
\n\nthis.campaignService.getCampaign(paramId)\n .subscribe(\n obj => {\n // do something\n },\n () => {\n // handle error here\n }\n });\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果http.get调用返回 HTTP 500,我就不会点击.catch(...)Service 类中的部分。控制台输出未捕获的异常。
GET http://localhost:9001/api/v1/campaigns/4175edc4 500 (Internal Server Error)\nEXCEPTION: Response with status: 500 Internal Server Error for URL: http://localhost:9001/api/v1/campaigns/4175edc4\nUncaught Response {_body: "{"message":"invalid input syntax for uuid: \\"4175edc4\\""}", status: 500, ok: false, statusText: "Internal Server Error", headers: Headers\xe2\x80\xa6}\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里可能做错了什么?
\nAngular 2 遵循 Fetch 规范,只有在请求操作出现问题时才会抛出错误。如果返回错误响应,它不会抛出异常(因为错误响应仍然是有效响应)。
您需要检查response.ok属性以确保它不是 404 或 500 等。