我有一个扩展角度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
的具体实现,但如果在MyHttp
和MyJwtHttp
类之外使用map
运算符,则其关联的回调应该接收响应对象,而不是JSON内容。