【问题标题】:Subscribe to child Observable's Subscribe in RxJS订阅子 Observables 在 RxJS 中订阅
【发布时间】:2019-05-17 04:35:19
【问题描述】:

我有emitEvenFrom 方法,它接受一个参数并发出事件。

当参数为 false 时,它​​不会发出任何事件,但会直接返回 of 类型的 observable。

import { Observable, Observer, of } from 'rxjs'

function emitEventFrom(thisObservable: boolean): Observable<string> {
    return Observable.create(function (observer: Observer<String>) {
        if (thisObservable) {
          observer.next('thisObservable')
          observer.complete()
        } else {
          // Returning Rx.Observable.of()
          return of('Other observable')
        }
    })
}

emitEventFrom(false).subscribe({
    next: (value) => console.log(value),
    error: (error) => console.log(error)
})

为什么当我返回 of Observable 时订阅没有调用它。

相反,我必须显式订阅那个 observable 并将事件传递给父 observable,然后它才会起作用。这样做会增加我编写的代码。

function emitEventFrom(thisObservable: boolean): Observable<string> {
    return Observable.create(function (observer: Observer<String>) {
        if (thisObservable) {
            observer.next('thisObservable')
            observer.complete()
        } else {
            // Returning Rx.Observable.of()
            of('Other observable').subscribe({
                next: (value) => observer.next(value),
                error: (error) => observer.error(error)
            })
        }
    })
}

我做错了吗?或告诉我一个更好的方法。

【问题讨论】:

    标签: typescript rxjs


    【解决方案1】:

    您需要从您的函数中返回of,而不是在Observable.create 内部

    这是一个有效的blitz

    将您的emitEventFrom 更改为关注

    function emitEventFrom(thisObservable: boolean): Observable<string> {
      if (thisObservable) {
        return Observable.create(function (observer: Observer<String>) {
          observer.next('thisObservable')
          observer.complete();
        });
      } else {       
        return of('Other observable');
      }
    }
    

    【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2017-03-26
    • 2020-10-28
    • 2017-08-24
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多