RxJS - 跳过订阅
RxJS - Skip to subscribe
我想知道是否有办法使可观察对象跳到订阅运算符(不终止)。我的用例是,我有一个 'loginClicked' 可观察对象(一个主题),我在其中执行 API 调用,然后订阅下一个事件。 API 调用是使用 promises 执行的,我遇到的任何错误都包含在
中
Promise.resolve(error)
这样 observable 就不会终止(允许他们尝试使用相同的 observable(主题)再次登录)。
但是在调用 API 之前我想使用
doOnNext()
检查互联网连接。如果有连接,则照常继续。但是,如果什么都没有,我想立即直接进入订阅的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
}
});
我想知道是否有办法使可观察对象跳到订阅运算符(不终止)。我的用例是,我有一个 'loginClicked' 可观察对象(一个主题),我在其中执行 API 调用,然后订阅下一个事件。 API 调用是使用 promises 执行的,我遇到的任何错误都包含在
中Promise.resolve(error)
这样 observable 就不会终止(允许他们尝试使用相同的 observable(主题)再次登录)。
但是在调用 API 之前我想使用
doOnNext()
检查互联网连接。如果有连接,则照常继续。但是,如果什么都没有,我想立即直接进入订阅的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
}
});