我有一个扩展角度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返回给请求的调用者。
知道如何解决这个问题吗?
答案 0 :(得分:0)
如果您想在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内容。