【问题标题】:Rxjs Observable sends undefined - how to avoid itRxjs Observable 发送未定义 - 如何避免它
【发布时间】:2018-02-24 10:45:04
【问题描述】:

我在 Observable 中有一个 GET 请求。我想把它的结果发送给观察者。不幸的是,它发送了未定义的值,因为它甚至在 GET 执行完成之前就与观察者通信 - 这就是问题所在。

 observer:Observer<any> = {
  next: objectFromObservable => { SomeActionWith() }
}


let outputToObserver;
  this.http.get(myUrl).map((programs)=>{
          const mapped = programs.json() as Program[];
      outputToObserver=mapped //here we always have desired object
          return mapped;
      })
      .subscribe(
        (res)=>{
          return res; //here we always have desired object
        }
      )
    //Here outputToObserver is undefined, so above lines are executed before mapping
      let observable:Observable<any> = Observable.create(function (obserwator) {
      observer.next(outputToObserver)

【问题讨论】:

  • 很难理解你想用这段代码实现什么。如果你能指定你的要求,我可以帮助解决这个问题。
  • 谢谢,尽我所能编辑。

标签: rest typescript asynchronous request rxjs


【解决方案1】:

您也可以使用 do 将其作为副作用触发,在这种情况下代码可以更具可读性和线性。

let outputStream=new Subject()

this.http.get(myUrl).map((programs)=>programs.json())
.do(value=>outputStream.next(value))
.subscribe()

outputStream.subscribe()

【讨论】:

    【解决方案2】:

    你可以这样做

    getDataFromMyUrl() {
      return this.http.get(myUrl).map((programs)=>{
              const mapped = programs.json() as Program[];
              return mapped;
          })
    }
    

    从消费端你可以做这样的事情

    var getData = getDataFromMyUrl()
                    .subscribe(res => {
                         // Process the data here....
                    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多