2016-11-20 139 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)