【问题标题】:angular2: Obserable<Response> response.json() after all subscribes are done角度 2:在所有订阅者完成后 Observable<Response> response.json()
【发布时间】:2023-03-13 02:58:01
【问题描述】:

我有一个扩展 Angular Http 类的类,我们称之为 MyHttp。 我还有 MyJwtHttp 类,它扩展了 MyHttp 类。

我希望能够将响应返回为 json 问题是,如果我正在做这样的事情:

myJwtHttp.request(..).map(res=>res.json()

而request方法的实现是:

class MyHttp extends Http {
    request(url,...){
        ..
         ..
    return super.request(url).subscribe(res=> doSomething(res))
    }
}

这里的问题是map 函数在MyHttp 类的订阅者之前被调用。这会导致 doSomething(res) 的输入是 json 而不是响应本身..

我尝试使用last 代替map,但它不会将json 返回给请求的调用者。

知道如何解决这个问题吗?

【问题讨论】:

  • 您确定要subscribe 响应您的请求,并调用doSomething(res) 而不是使用map 吗?

标签: angular rxjs rxjs5


【解决方案1】:

如果你想在 MyHttp 类中处理请求,我会使用 do 运算符,而不是订阅相应的 observable:

class MyHttp extends Http {
  request(url,...) {
    (...)
    return super.request(url).do(res=> doSomething(res));
  }
}

在您的情况下,request 方法不会返回可观察对象,而是返回对应于 subscribe 方法调用的订阅对象。

来自 rxjs 文档:

为可观察序列中的每个元素调用一个动作,并在可观察序列正常或异常终止时调用一个动作。

该方法可用于查询行为的调试、记录等,通过拦截消息流对管道上的消息运行任意动作。

关于执行顺序,我不完全了解MyJwtHttp 的实现,但如果map 运算符在MyHttp 和MyJwtHttp 类之外使用,其关联的回调应该会收到一个响应对象和不是 JSON 内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2018-02-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多