概要
RxJSでempty, NEVER, throwError の挙動にはまったのでメモ書き。
ReactiveX - Empty, Never, and Throw operators
動作環境
- TypeScript 2.7.x
- RxJS 6.x
empty
サンプルソース
import { empty } from 'rxjs'; function testEmpty(): void { empty().subscribe( () => { console.log('empty() - success'); }, err => { console.log('empty() - error'); }, () => { console.log('empty() - complete'); } ); }
実行結果
empty() - complete
emptyは completeのみ通ります。
NEVER
サンプルソース
import { NEVER } from 'rxjs'; function testNever(): void { NEVER.subscribe( () => { console.log('NEVER - success'); }, err => { console.log('NEVER - error'); }, () => { console.log('NEVER - complete'); } ); }
実行結果
どの箇所も処理がされません。
throwError
サンプルソース
import { throwError } from 'rxjs'; function testThrow(): void { throwError('err').subscribe( (value) => { console.log('throwError() - success - ' + value); }, err => { console.log('throwError() - error - ' + err); }, () => { console.log('throwError() - complete'); } ); }
実行結果
throwError() - error - err
throwErrorはエラーのみで、completeは通らないようです。
おわりに
map 処理内で後処理の挙動を変えたい場合、empty, NEVER, throwErrorを利用することで色々実現できます。
例外時に次の処理を止めたり、途中で例外を発生させたりできるので、共通部品実装時等で使えると思います。