開発覚書はてな版

個人的な開発関連の備忘録

【RxJS】empty, NEVER, throwError の挙動

概要

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を利用することで色々実現できます。
例外時に次の処理を止めたり、途中で例外を発生させたりできるので、共通部品実装時等で使えると思います。