Почему `of (undefined) испускает, а` of () `нет? - PullRequest
1 голос
/ 27 апреля 2020

Я обнаружил, что это работает на некоторых модульных тестах. Кто-нибудь может объяснить, почему это так работает? Для меня это похоже на ошибку.

Здесь мой тест проходит, когда не должен, потому что наблюдаемое не излучает.

enter image description here

Изменение of() на of(undefined) приводит к правильному сбою теста.

enter image description here

Я ожидаю of() и of(undefined) быть эквивалентным. Кто-нибудь знает причину, почему это не так?

1 Ответ

1 голос
/ 27 апреля 2020

Причина этого в том, что параметры метода of() определены как параметр отдыха ...args, поэтому они объединяются в массив, поэтому пустой массив передается.

rxjs / src / internal / observable / of.ts

export function of<T>(...args: Array<T | SchedulerLike>): Observable<T> {
  let scheduler = args[args.length - 1] as SchedulerLike;
  if (isScheduler(scheduler)) {
    args.pop();
    return scheduleArray(args as T[], scheduler);
  } else {
    return fromArray(args as T[]);
  }
}

of(undefined) превращается в [undefined], в этом случае undefined испускается.

of() превращается в [], в этом случае ничего не излучается.

Что касается ошибки, я думаю, что она работает так, как они намеревались:

@ значения param {... T} Разделенный запятыми список аргументов, которые вы хотите передать

Исходя из этого, я бы сказал, что если вы ничего не передаете, ничего не должно выдаваться.

...