В чем разница между использованием from и of при использовании switchMap? - PullRequest
0 голосов
/ 04 июня 2019

Это мой код TS с использованием RxJS:

function getParam(val:any):Observable<any> {
        return from(val).pipe(delay(1000))
    }

    of(1,2,3,4).pipe(
        switchMap(val => getParam(val))
    ).subscribe(val => console.log(val));

Насколько я понимаю, функция getParam будет возвращать 'val', заключенный в наблюдаемую. Однако switchMap выдает следующую ошибку:

hostReportError.js:5 Uncaught TypeError: You provided '1' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (subscribeTo.js:39)
    at Module.from (from.js:15)
    at getParam (index.ts:6)
    at SwitchMapSubscriber.eval [as project] (index.ts:8)
    at SwitchMapSubscriber._next (switchMap.js:43)
    at SwitchMapSubscriber.Subscriber.next (Subscriber.js:63)
    at Observable.eval [as _subscribe] (subscribeToArray.js:7)
    at Observable._trySubscribe (Observable.js:50)
    at Observable.subscribe (Observable.js:36)
    at SwitchMapOperator.call (switchMap.js:27)

Если я изменю код getParam на:

function getParam(val:any):Observable<any> {
    return of(val).pipe(delay(1000))
}

Возвращает 4 как и ожидалось. Так почему же оператор from не возвращает наблюдаемое в этом случае?

Редактировать: Это не дубликат RxJs Наблюдаемый vs от , потому что я не спрашиваю о входных аргументах для from и of. У меня вопрос как from, так и of, должны ли оба наблюдаемые, да? Но когда я использую from, switchMap жалуется, что он НЕ получает наблюдаемое, а просто получает '1' из массива. Надеюсь, что это проясняет.

1 Ответ

2 голосов
/ 04 июня 2019

Ошибка выдается не из switchMap
getParam (val: any) получил число, поэтому from () не может принять его как ввод, но () может


    hostReportError.js:5 Uncaught TypeError: 
      You provided '1' where a stream was expected. 
      You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (subscribeTo.js:39)
    at Module.<b>from</b> (from.js:15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...