【发布时间】:2018-01-09 21:59:13
【问题描述】:
我一直在学习 Angular 4,一切都很顺利,直到我尝试在服务中实现 catch 处理。我正在尝试使用“rxjs”捕捉并抛出,但我的控制台中有一个未定义的函数错误。
import { Injectable } from '@angular/core';
import { Http } from "@angular/http";
import { Observable } from 'rxjs/observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { AppError } from "../app/common/app.error";
import { NotFoundError } from "../app/common/not-found-error";
import { BadInput } from "../app/common/bad-input";
@Injectable()
export class PostService {
private url = "https://jsonplaceholder.typicode.com/posts";
constructor(private http: Http) { }
deletepost(post){
// return this.http.delete(this.url + '/' + post.id)
// Hard-coded id to test 404
return this.http.delete(this.url + '/' + 93498)
.catch((error: Response) => {
console.log('error within catch is ' + Response)
if(error.status === 404)
return Observable.throw(new NotFoundError(error));
return Observable.throw(new AppError(error));
});
}
}
这是错误信息:
TypeError: __WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw is not a function.
(In '__WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw(new
__WEBPACK_IMPORTED_MODULE_6__app_common_not_found_error__["a" /* NotFoundError
*/](error))',
'__WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw' is
undefined) — post.service.ts:42
我的浏览器中也有这个警告:
./~/rxjs/Observable.js
There are multiple modules with names that only differ in casing.
This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
Use equal casing. Compare these module identifiers:
* /Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/rxjs/Observable.js
Used by 14 module(s), i. e.
/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/@angular/core/@angular/core.es5.js
* /Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/rxjs/observable.js
Used by 1 module(s), i. e.
/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/@ngtools/webpack/src/index.js!/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/src/services/post.service.ts
【问题讨论】:
-
尝试使用大写“O”导入
import { Observable } from 'rxjs/Observable';,而不是使用小写“o”导入import { Observable } from 'rxjs/observable';,看看是否有任何不同。 -
@AlexanderStaroselsky 哇,我不敢相信这就是原因。我没有注意到它是大写 O,因为它与所有其他导入依赖项的命名约定不匹配。您应该将此作为答案发布,以便我将其标记为正确。
-
我也经历过同样的事情,错误并不总是很清楚。介意我将其作为答案,以便其他遇到此问题的人可以找到解决方案吗?
-
@AlexanderStaroselsky 是的,去吧。为这个问题创建一个答案,我会将其标记为正确。感谢您的帮助。
标签: angular rxjs observable throw