【问题标题】:Rxjs observable is subscribed twiceRxjs observable 被订阅了两次
【发布时间】:2021-05-21 16:47:44
【问题描述】:

我从 rxjs 库开始,尝试向 API REST 发出请求。我遇到的问题是subscribe 中的代码被执行了两次,但只被调用了一次

observable 方法从promise 创建一个observable

post(url, body): Observable<Response> {
    return from(fetch(url, {
       method: 'POST',
       body: JSON.stringify(body),
       headers: {
          'Accept': 'application/json, text/plain',
          'Content-Type': 'application/json;charset=UTF-8'
       }
     }))
 }

然后,我用来读取流值的代码是:(我已经检查过,它只被调用一次)

doLogin(){
    var creds={
        "email":"user@gmail.com",
        "password":"user"
    }
    var stream$ =this.httpService.post("http://localhost:8080/api/login",creds)
    stream$.subscribe(x=>console.log(x))
}

我在导航器控制台中看到的结果是 2 console.log() 以及获取响应的结果

【问题讨论】:

  • 你可以在var stream$之后加上一个console.log,这样你就知道你的doLogin是否被调用了两次。
  • 我搞定了,方法doLogin只执行一次

标签: reactjs rxjs observable reactive-programming reactive


【解决方案1】:

我认为在订阅函数中实际发生的事情是,当您从流中接收到新值时,您可以定义要做什么。这意味着 subscribe 实际上并没有被执行两次,而是两次接收一个值。

【讨论】:

  • 这可能是原因,我已经测试在控制台日志中打印时间戳,并且第一个日志在第二个日志之前 1 毫秒完成。你知道第一种方法是如何在流中发送两个值的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2016-09-25
相关资源
最近更新 更多