Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.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
Javascript 为什么在主题完成后仍可以调用subscribe?_Javascript_Angular_Rxjs_Subject Observer - Fatal编程技术网

Javascript 为什么在主题完成后仍可以调用subscribe?

Javascript 为什么在主题完成后仍可以调用subscribe?,javascript,angular,rxjs,subject-observer,Javascript,Angular,Rxjs,Subject Observer,根据大多数博客,一旦我们称之为complete,我们不需要明确取消订阅主题。我打电话给complete后,试图订阅该主题。仍在执行完整的回调 let s = new Subject(); s.complete(); s.subscribe( () => { console.log("next"); }, () => {}, () => { console.log("complete"); } ); 输出:完成 为什么在主题完成后才允许订阅

根据大多数博客,一旦我们称之为complete,我们不需要明确取消订阅主题。我打电话给complete后,试图订阅该主题。仍在执行完整的回调

let s = new Subject();
s.complete();

s.subscribe(
  () => {
    console.log("next");
  },
  () => {},
  () => {
    console.log("complete");
  }
);
输出:完成


为什么在主题完成后才允许订阅它?

在这种情况下,首先发送“完成”通知,然后立即取消订阅。所以它仍然认为,你不必手动不明嫌犯


如果您首先想知道订阅有什么用,您可以考虑一个例子,我们将
isEmpty
运算符应用于主题,并根据该运算符所指定的值执行某些操作。

为什么对此感到惊讶?你期望发生什么?这是因为
subscribe
是什么。您将得到一个
next
回调,一个
error
回调,最后是第三个
complete
回调。您正在捕获它,因此您会看到记录的
“complete”