gpt4 book ai didi

RxJS:从另一个 observable 设置 observable 的默认值

转载 作者:行者123 更新时间:2023-12-04 17:32:20 25 4
gpt4 key购买 nike

我正在尝试创建可观察流,它从 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仅适用于简单值的方法,不适用于 observables。在 Bacon.js 中有 or流的方法,它工作得很好,但我在 RxJS 中没有看到任何类似的东西。我错过了什么还是我需要实现自定义观察者?

最佳答案

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

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

关于RxJS:从另一个 observable 设置 observable 的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com