Functional programming RxJS-跳过以订阅
我想知道是否有一种方法可以使一个可观察对象跳到subscribe操作符(而不终止)。我的用例是,我有一个“loginClicked”可观察对象(一个主题),在这里我执行一个API调用,然后订阅下一个事件。API调用是使用承诺执行的,如果遇到任何错误,我都会使用Functional programming RxJS-跳过以订阅,functional-programming,reactive-programming,rxjs,Functional Programming,Reactive Programming,Rxjs,我想知道是否有一种方法可以使一个可观察对象跳到subscribe操作符(而不终止)。我的用例是,我有一个“loginClicked”可观察对象(一个主题),在这里我执行一个API调用,然后订阅下一个事件。API调用是使用承诺执行的,如果遇到任何错误,我都会使用 Promise.resolve(error) 这样可观察对象就不会终止(允许他们使用相同的可观察对象(subject)再次尝试登录) 然而,在调用API之前,我想使用 doOnNext() 检查internet连接。如果存在连接,则按
Promise.resolve(error)
这样可观察对象就不会终止(允许他们使用相同的可观察对象(subject)再次尝试登录)
然而,在调用API之前,我想使用
doOnNext()
检查internet连接。如果存在连接,则按正常方式继续。但是,如果没有任何问题,我想立即直接转到subscribe的onNext回调,传入一些“NoConnectivityError”
有什么能帮我解决这个问题吗?还是我走错了方向
谢谢
更新
例如:
this.loginClickedStream
.doOnNext(function() {
if (!connectedToWifi) {
//Skip to subscribe passing some data somehow
skipToSubscribe({error: 'NotConnectedToWifi'});
}
})
.flatMap(function() {
return fetch(url);
})
.subscribe(function(response) {
if (response.error === 'NotConnectedToWifi') {
//Show alert
} else if (response.ok) {
//Display response in UI
} else {
//Show alert showing error
}
});
请注意,当用户未连接到wifi时,observable是如何直接传递给subscribe方法的。我希望这更清楚。您可以在flatMap中完成,如下所示:
this.loginClickedStream
.flatMap(function() {
if (!connectedToWifi) {
return Rx.Observable.return({error: 'NotConnectedToWifi'});
} else {
return fetch(url);
}
})
.subscribe(function(response) {
if (response.error === 'NotConnectedToWifi') {
//Show alert
} else if (response.ok) {
//Display response in UI
} else {
//Show alert showing error
}
});
您能添加一个更完整的代码示例吗?我不清楚你到底想做什么。我已经更新了OP,希望能有所帮助。