【问题标题】:Handle rxjs from(Array<observables>) when the array is empty当数组为空时处理来自(Array<observables>) 的 rxjs
【发布时间】:2019-05-15 09:59:02
【问题描述】:

给定以下函数,在 typescript 中,它返回一个 observable 并接收一个 Observable 数组,我怎样才能以更优雅的方式删除第一个 if,它检查数组是否为空,以便 observable在函数上调用 subscribe() 时完成。

我实现了 if。但它看起来很丑。

perform_scan_session_uploads(scan_operations: Array<Observable<any>>): Observable<any> {
        // TODO: Check the errors in this inner observable.

        if (scan_operations.length === 0) {
            return of([true]);
        }

    return from(scan_operations).pipe(
            concatAll(),
            toArray(),
            switchMap((result) => this.send_devices(result)),
            switchMap((result) => this.check_device_errors(result)),
            tap(() => {
                console.log('Scan Errors: ', this.scan_errors);
            }),
            tap(() => this.clean_scan_session_data()),
        );

    }

【问题讨论】:

    标签: typescript rxjs


    【解决方案1】:

    from([]) 将立即完成 observable,因此后续运算符不会执行。可以跳过长度检查

     perform_scan_session_uploads(scan_operations: Array<Observable<any>>): Observable<any> {
            return from(scan_operations).pipe(
                    concatAll(),
                    toArray(),
                    switchMap((result) => this.send_devices(result)),
                    switchMap((result) => this.check_device_errors(result)),
                    tap(() => {
                        console.log('Scan Errors: ', this.scan_errors);
                    }),
                    tap(() => this.clean_scan_session_data()),
                );
    
            }
    

    【讨论】:

    • 没错,我正在改变一些东西,但没有意识到它是这样工作的。非常感谢。
    猜你喜欢
    • 2018-08-15
    • 2023-04-09
    • 2020-04-22
    • 2021-02-18
    • 2019-10-28
    • 2016-06-05
    • 2020-05-22
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多