計算機科学のブログ

非同期処理 オブザーバブル コンビネーター関数、組合せ

入門JavaScriptプログラミング (JD Isaacks(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT7(非同期処理)、LESSON 33(オブザーバブル)、33.5(練習問題)、Q33-1の解答を求めてみる。

コード

function collect(obs$) {
    const values = [];

    return new Observable(
        observer => {
            obs$.subscribe({
                next(val) {
                    values.push(val);
                    observer.next(values);
                }
            });
        }
    );
}

function sum(obs$) {
    return new Observable(
        observer => {
            obs$.subscribes({
                next(values) {
                    observer.next(
                        values.reduce((a, b) => a + b)
                    );
                }
            });
        }
    );
}

sum(collect(Observable.of(1, 2, 3, 4)))
    .subscribe({
        next(val) {
            console.log(val);
        }
    })