等同于Promise.resolve()
的是什么(没有任何价值的解决很重要)?
这里有一个类似的问题:rxjs alternative to doing a Promise.resolve?。
如果我们提供任何数据,给定的解决方案(Observable.of(data)
)运行良好,但如果我们没有提供对我有意义的值,因为没有值,这不起作用,所以{{1}不被解雇。
在ionic2应用程序的Angular2服务中,我正在尝试将基于Promise的服务迁移到Observables。如果设备处于脱机状态,我需要跳过序列的某些步骤。有了承诺,我抛出一个错误,然后在序列中捕获它:
.subscribe()
以下代码不会:
return this.connectivityService.isOnline()
.flatMap((isOnline: boolean) => {
if (isOnline) {
return Promise.resolve(); // work as expected, subscribe() is called
} else {
return Observable.throw(new OfflineError('The device is offline.'));
}
})
.do(() => console.log('Do things here'));
是否可以通过可观察对象实现相同的目标?如果我对可观察量的使用不好,请随时告诉我,这对我来说是新的。
答案 0 :(得分:1)
以直接方式回答问题:
相当于Promise.resolve()
将是Observable.of(undefined)
- 但通常您可以避免此类变通办法。
您是否简化了代码?因为在你的情况下,你实际上不必在这里使用flatMap
,你也可以直接抛出错误:
return this.connectivityService.isOnline()
.do((isOnline: boolean) => {
if (!isOnline) {
throw new OfflineError('The device is offline.');
}
})
.do(() => console.log('Do things here'));
const isOnline$ = new Rx.BehaviorSubject(false); // some online-check-service-mock
isOnline$
.do(isOnline => {
if (!isOnline) {
throw new Error("You are offline!");
}
})
.do(() => console.log('Do things here'))
.subscribe(
console.log,
error => console.error("Oops! ", error.message),
console.info
);

<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
&#13;