【发布时间】:2017-02-15 12:20:11
【问题描述】:
这是一段基于 Promise 的遗留代码,当条件(全局变量的存在)被满足时,它会按预期工作并导致完成 observable:
const fooPromise = new Promise(resolve => {
const interval = setInterval(() => {
if (window.foo) {
clearInterval(interval);
resolve(window.foo);
}
}, 100);
});
setTimeout(() => {
window.foo = {};
}, 1000)
const foo$ = Rx.Observable.fromPromise(fooPromise);
foo$.subscribe(
() => console.log('success'),
() => console.log('error'),
() => console.log('complete')
);
我正在尝试将其转换为更简洁的仅可观察解决方案,fiddle:
'use strict';
setTimeout(() => {
window.foo = {};
}, 1000)
const foo$ = Rx.Observable.interval(100).map(() => foo).retry(-1)
foo$.subscribe(
() => console.log('success'),
() => console.log('error'),
() => console.log('complete')
);
看起来我走在了正确的轨道上,但 observable 尚未完成并继续向值发送垃圾邮件。
解决此问题的适当方法是什么?
【问题讨论】:
标签: javascript rxjs observable rxjs5