angular2:完成所有订阅后的Obserable <response> response.json()

时间:2016-03-23 20:56:26

标签: angular rxjs rxjs5

我有一个扩展角度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返回给请求的调用者。

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

1 个答案:

答案 0 :(得分:0)

如果您想在MyHttp课程中对请求执行某些操作,我会使用do运算符,而不是订阅相应的observable:

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

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

来自rxjs文档:

  

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

     

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

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