2016-11-20 136 views
0

我想认购可观察的区间订阅可观察区间回调永远不会触发

return IntervalObservable.create(10000) 
    .startWith(0) // needs a value, but won't be used 
    .flatMap(() => this._http.get(eazyUrl)).map(res => res.text()) 

这是认购代码

var answer = this.LogService.getAdminHiererchy() 
     var Fdata: any; 
     answer.subscribe((response) => { 

      Fdata = response; 
      localStorage.setItem("AdminHiererchy", response); 
      console.log(Fdata); 

     }, 
      error => { 
       var err = error; 

       alert("error"); 
      } 

     ,() =>{this.readyFunc(Fdata);}) 

this.readyFunc是从来没有火。

如果删除intreval代码工作得很好

return this._http.get(eazyUrl) 
     .map(res => res.text()); 

也没有运气

answer.finally(() => this.readyFunc(Fdata)).subscribe((response) => {... 

也试图与计时器一样resualt终于尝试

return Observable.timer(0, 10000) 
    .flatMapTo(this._http.get(eazyUrl)).map(res => res.text());; 

为什么回拨在使用时不会触发

+0

为什么你认为应该调用回调? –

+0

在准备就绪时处理数据 – baaroz

+0

回调是传递给订阅的第三个参数。第一个在事件发出时调用。第二个是在发生错误时调用。第三个叫什么时候? –

回答

0

删除startWith(0),我怀疑它会在您订阅之前终止您的流。

其他选项(因为IntervalObservable未记录坚硬,jsbin调用):

  1. 改用Observable.timer(1000).flatMap(...)
  2. 使用Observable.of(0).delay(1000).flatMap(...)
  3. 添加.do(v => console.log(v))你的第一种方法的每一行后:

    return IntervalObservable.create(10000) .do(v => console.log('stage 1: ', v) .startWith(0) // needs a value, but won't be used .do(v => console.log('stage 2: ', v) .flatMap(() => this._http.get(eazyUrl)).map(res => res.text()) .do(v => console.log('stage 3: ', v)