angular2:<Response>完成所有订阅后的可观察响应.json()



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

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

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

并且CCD_ 5方法的实现是:

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

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

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

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

如果您想在MyHttp类中处理请求,我会使用do运算符,而不是订阅相应的可观察对象:

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

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

来自rxjs文档:

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

此方法可用于调试、记录查询行为等,方法是截取消息流,对管道上的消息执行任意操作。

关于执行顺序,我不知道MyJwtHttp的具体实现,但如果在MyHttpMyJwtHttp类之外使用map运算符,则其关联的回调应该接收响应对象,而不是JSON内容。

最新更新