rxjs 管道到 observable 在将其绑定到 observable 引用时不会引发

问题描述

谁能解释一下为什么这个打字稿代码有效,并且 - 地图和点击被提升:

var request = this.http.get("https://jsonplaceholder.typicode.com/todos/1")
  .pipe(
    map(x => {
      console.log(map);
      //this will be raised
    }),tap((x: any) => {
      console.log(tap);
      //this will be raised
    }
    ));
request.subscribe((x) => alert(x));

在这代码中:

var request = this.http.get("https://jsonplaceholder.typicode.com/todos/1");
request.pipe(
  map(x => {
    console.log(map);
    //this will not be raised
  }),tap((x: any) => {
     console.log(tap);
    //this will not be raised
  }
  ));
request.subscribe((x) => alert(x));

地图和水龙头没有凸起。 为什么他们的行为不同?

如果这是预期的行为 - 例如,将请求创建和管道分离到不同位置的正确方法是什么 - 一种方法创建请求,第二种方法将其绑定到管道,第三种方法引发它通过调用订阅”。
谢谢!

解决方法

基本上你需要类似的东西

const request = this.http.get("https://jsonplaceholder.typicode.com/todos/1");

const piped = request.pipe(
  map(x => {
    console.log(map);
  }),tap((x: any) => {
     console.log(tap);
  }
  ));

const subscription = piped.subscribe((x) => alert(x));

注意:避免使用 var,而是使用 const/let,它们是块作用域的(这是您大多数时候想要的),而 var 不是。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...