ReactiveX / rxjs

A reactive programming library for JavaScript

Home Page:https://rxjs.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

why Symbol(observable) and @@observable exist?

coolxv opened this issue · comments

Bug Report

Current Behavior
webSocket(url) exist Symbol(observable) property
new Observable or mergeMap exist @@observable property
typeof result[Symbol_observable] can only judge one property

TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

export const subscribeTo = <T>(result: ObservableInput<T>): (subscriber: Subscriber<T>) => Subscription | void => {
  if (!!result && typeof result[Symbol_observable] === 'function') {
    return subscribeToObservable(result as any);
  } else if (isArrayLike(result)) {
    return subscribeToArray(result);
  } else if (isPromise(result)) {
    return subscribeToPromise(result);
  } else if (!!result && typeof result[Symbol_iterator] === 'function') {
    return subscribeToIterable(result as any);
  } else {
    const value = isObject(result) ? 'an invalid object' : `'${result}'`;
    const msg = `You provided ${value} where a stream was expected.`
      + ' You can provide an Observable, Promise, Array, or Iterable.';
    throw new TypeError(msg);
  }

Expected behavior
There is only one,Symbol(observable) or @@observable

Environment

  • Runtime: Chrome v79
  • RxJS version:6.4.0

Symbol.observable is the interop point for different observable implementations. See https://github.com/tc39/proposal-observable#api