Подпишитесь на ребенка Observable's Подписаться на RxJS - PullRequest
1 голос
/ 17 мая 2019

У меня есть emitEvenFrom метод, который принимает один аргумент и генерирует событие.

когда аргумент равен false, он не генерирует никакого события, хотя непосредственно возвращает наблюдаемое типа of.

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 Наблюдается, когда я ее вернул.

Вместо этого я должен явно подписаться на это наблюдаемое и передать событие родительскому наблюдаемому, тогда только оно работает. Это увеличивает код, который я пишу.

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)
            })
        }
    })
}

Я что-то не так делаю? или покажи мне лучший способ.

1 Ответ

1 голос
/ 17 мая 2019

Вам нужно вернуть of из вашей функции вместо Observable.create

Вот рабочий блиц

Измените 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');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...