【问题标题】:RxJS - Skip to subscribeRxJS - 跳过订阅
【发布时间】:2015-11-04 00:07:11
【问题描述】:

我想知道是否有办法让 observable 跳到订阅操作符(不终止)。我的用例是,我有一个“loginClicked”可观察对象(一个主题),我在其中执行 API 调用,然后订阅下一个事件。 API 调用是使用 Promise 执行的,我遇到的任何错误都会包含在一个

Promise.resolve(error)

这样可观察对象不会终止(允许他们尝试使用相同的可观察对象(主题)再次登录)。

但是,在我调用我想要使用的 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 方法的。我希望这更清楚。

【问题讨论】:

  • 您能否添加一个更完整的代码示例来说明您目前所拥有的内容?我不清楚你到底想做什么。
  • 我已经更新了 OP,希望对您有所帮助。

标签: functional-programming reactive-programming rxjs


【解决方案1】:

你可以在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
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多