Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rxjs 为什么`of(未定义)发出,而`of()`不发出?_Rxjs - Fatal编程技术网

Rxjs 为什么`of(未定义)发出,而`of()`不发出?

Rxjs 为什么`of(未定义)发出,而`of()`不发出?,rxjs,Rxjs,我在一些单元测试中发现了这一点。有人能解释为什么会这样吗?对我来说,它就像一只虫子 在这里,我的测试通过了,但它本不应该通过,因为可观察到的东西没有发射 将()的更改为(未定义)会导致测试正确失败 我希望()的和(未定义的)的是等价的。有人知道它们不存在的原因吗?这是因为of()方法的参数被定义为…args,因此它们被合并到一个数组中,从而传递一个空数组 (…args:Array)的导出函数:可观察{ 让scheduler=args[args.length-1]作为SchedulerLik

我在一些单元测试中发现了这一点。有人能解释为什么会这样吗?对我来说,它就像一只虫子

在这里,我的测试通过了,但它本不应该通过,因为可观察到的东西没有发射

将()的
更改为(未定义)
会导致测试正确失败


我希望()的
和(未定义的)
是等价的。有人知道它们不存在的原因吗?

这是因为
of()
方法的参数被定义为
…args
,因此它们被合并到一个数组中,从而传递一个空数组

(…args:Array)的导出函数:可观察{ 让scheduler=args[args.length-1]作为SchedulerLike; if(isScheduler(调度器)){ args.pop(); 返回scheduleArray(参数为T[],调度程序); }否则{ 从数组返回(参数为T[]); } }
of(undefined)
变为
[undefined]
,此时发出
undefined

of()
变为
[]
,在这种情况下不会发出任何信号

作为一个bug,我认为它正在按照他们的意图工作:

@param{…T}值要发出的参数的逗号分隔列表


因此,我想说,如果你没有通过任何东西,就不应该发出任何东西。

我毫不怀疑这是故意的。您可以调用()的
,却什么也没发生,这看起来真的很奇怪。如果您正在调用函数,那么您似乎期望发生一些事情。若并没有提供参数,那个么发出未定义的信息似乎很自然。虽然我可能只是希望可观察的工作更像承诺。“而且什么都没有发生”-
of()
通常做3件事:1)创建可观察的2)发出提供的值3)完全可观察的。它仍在执行第1项和第3项。正如BizzyBox提到的,它做了一些事情。如果你不打电话,承诺永远不会产生价值。如果不调用,Observable.create将永远不会发出值。下一步。工作的重要性也是如此。如果函数未获取任何值作为param,则不会发出任何值。我认为这是一个非常可预测的api,空的有一种感觉:可观察的,完成时没有任何值发出。
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[]);
  }
}