[解決済み] "rxjs" observable.throw は関数ではありません - Angular4
質問
Angular 4を学んでいて、すべて順調に進んでいたのですが、あるサービスでcatchハンドリングを実装しようとしました。私は "rxjs" catch と throw を使おうとしていますが、コンソールに未定義の関数エラーが表示されます。
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
解決方法は?
エラー
There are multiple modules with names that only differ in casing.
を使おうとしているのは、間違ったインポートを対象にしていることを示しています。
Observable
.
インポートは大文字の"O"のようにします。
import { Observable } from 'rxjs/Observable';
これは、個々の
Observable
演算子と組み合わせて使用されます。
catch
または
throw
を作成したObservableに追加します。
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
Observableオブジェクトを完全にインポートするには、次のようにインポートします。
import { Observable } from 'rxjs/Rx'
更新しました。
RxJSの新しいバージョン(5.5以上)では、以下のような演算子があります。
map()
と
filter()
として使用することができます。
パイプ式演算子
との組み合わせで
pipe()
をチェーンするのではなく などとインポートされている。
import { filter, map, catchError } from 'rxjs/operators';
などの用語を覚えておきましょう。
throw
はJavaScriptの予約語/キーワードなので、RxJSの
throw
演算子としてインポートされます。
import { _throw } from 'rxjs/observable/throw';
更新しました。
RxJSの新しいバージョン(6+)では、こちらをご利用ください。
import { throwError } from 'rxjs';
というようなエラーを投げます。
if (error.status === 404)
return throwError( new NotFoundError(error) )
関連
-
[解決済み】Angular2 CLI エラー "@angular/compiler-cli" パッケージが正しくインストールされていません。
-
[解決済み】ngサーブが機能しない
-
[解決済み】Angular: オブジェクトをサポートしているdiffが見つからない '[object Object]'
-
[解決済み] Angular 4: コンポーネントファクトリが見つかりません。@NgModule.entryComponents に追加しましたか?
-
[解決済み] チョキダーからのエラー(C:┣ᴗ┣)。Error: EBUSY: resource busy or locked, lstat 'C:\DumpStack.log.tmp.
-
[解決済み] Visual Code で未定義のプロパティ 'thisCompilation' を読み取ることができません。
-
[解決済み] AngularのmatSortがソートされない
-
[解決済み] Angular2 - エラー。セレクタ "app-root" はどの要素にもマッチしませんでした。
-
[解決済み] このメソッドをリファクタリングして、認知的複雑度を21から許容される15に下げます。リファクタリングして複雑さを軽減する方法
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angularのエラーです。NgModuleアノテーションを追加してください。
-
[解決済み] node_modules が空になったので、`npm install`を実行する必要があるかもしれない。
-
[解決済み] FormBuilder のプロバイダがない [重複] 。
-
[解決済み] 未定義のプロパティ 'filter' を読み取ることができません。
-
[解決済み] NullInjectorError: MatDialogRef 用のプロバイダがありません
-
[解決済み] Angular 2.0 翻訳パイプが見つかりません。
-
[解決済み] CLIでコンポーネントを削除する最も良い方法は何ですか?
-
[解決済み] "エラーです。オーバーレイのプロバイダがありません!"
-
[解決済み] なぜ mat-tables matRowDef は 2 つの変数を含むのですか?
-
[解決済み] Angularで電話番号の入力をフォーマットする