订阅可观察区间回调永远不会触发
问题描述:
我想认购可观察的区间订阅可观察区间回调永远不会触发
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());;
为什么回拨在使用时不会触发
答
删除startWith(0)
,我怀疑它会在您订阅之前终止您的流。
其他选项(因为IntervalObservable未记录坚硬,jsbin调用):
- 改用
Observable.timer(1000).flatMap(...)
- 使用
Observable.of(0).delay(1000).flatMap(...)
-
添加
.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)
为什么你认为应该调用回调? –
在准备就绪时处理数据 – baaroz
回调是传递给订阅的第三个参数。第一个在事件发出时调用。第二个是在发生错误时调用。第三个叫什么时候? –