【问题标题】:rxjs pipe to observable does not raise when bind it to the observable referencerxjs 管道到 observable 绑定到 observable 引用时不会引发
【发布时间】:2021-06-14 18:40:04
【问题描述】:

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

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));

map 和 tap 没有升起。 为什么他们的行为不同?

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

【问题讨论】:

  • pipe 返回一个 observable。你在第二个例子中没有处理它
  • 在第一个场景中,tapmap 通过管道传递给订阅的 observable。在第二个场景中,tapmap 被传送到未分配回变量 request 的 observable。将操作符连接到 observable 会创建修改后的 observable,并且不会影响源 observable。
  • Observable.pipe() 不会修改现有的 Observable 而是创建一个新的。

标签: angular typescript rxjs pipe angular2-observables


【解决方案1】:

基本上你需要类似的东西

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 不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2021-06-25
    • 2018-11-09
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多