【问题标题】:RxJS: Setting default value for observable from another observableRxJS:从另一个可观察对象设置可观察对象的默认值
【发布时间】:2016-08-29 15:17:11
【问题描述】:

我正在尝试创建可观察的流,该流从 cookie 中获取用户 ID,如果在 cookie 中找不到,则从 API 中获取它。如何在 RxJS 中做到这一点?

var userIdRequest = Rx.Observable.bindCallback(generateIdAsync);
var cookieUserIdStream = Rx.Observable.of(getCookieValue("user_id"))
    .filter(x => x !== null);

var userIdStream = cookieUserIdStream.__ifEmptyThen__(userIdRequest()); // <<< ???

// Emulating async request for user id
// Will be a JSONp call in real app
function generateIdAsync(cb) {
    setTimeout(() => {
        cb(`id_${new Date().getTime()}`);
    }, 300);
}

function getCookieValue(name) {
    var regexp = new RegExp(`${name}=([^;]*)`);
    var match = document.cookie.match(regexp);

    return match && match[1];
}

有一个defaultIfEmpty 方法仅适用于简单值,不适用于可观察对象。在 Bacon.js 中有 or 用于流的方法,它工作得非常好,但我在 RxJS 中看不到任何类似的东西。我错过了什么还是需要实现自定义观察者?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    您可以连接 2 个 observables 并获得第一个发出的值:

    var userIdStream = Rx.Observable.concat(cookieUserIdStream, userIdRequest).first();
    

    【讨论】:

    • 就是这样,很实用;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2022-08-19
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多