gpt4 book ai didi

javascript - 类似于 Promise.resolve() 的 Observable 运算符

转载 作者:行者123 更新时间:2023-12-03 05:14:21 26 4
gpt4 key购买 nike

是否有像 Promise.resolve() 这样的 Rx 运算符可以将 Observable 或普通值解析为普通值吗?

例如,我可以这样做:

Promise.resolve(3)
.then(function(val){
console.log('val => ',val);
});

当然,Promise.resolve() 也会接受 promise

但是,我很难找到类似的 Rx 运算符,像这样:

Rx.Observable.merge(3)
.do(function(val){
console.log('val => ',val);
})
.subscribe()

除了 Rx.Observable.merge 不会接受所有值,并且会像上面那样失败。

Rx.Observable.of(3)
.map(v => {
console.log('val => ', v);
})
.subscribe();

上面将接受一个数字,但如果你向它传递一个 Observable,它不会解开 Observable。

老实说,很难确定这一点,这令人非常沮丧。拥有这样的方法/功能将允许更灵活的代码,因为您可以重构代码以返回不可观察的值,并且它仍然可以工作。

这是迄今为止我得到的最接近的结果:

// creates an Observable from anything, which can be unwrapped
Rx.Observable.any = function (val) {

if (!(val instanceof Rx.Observable)) {
val = Rx.Observable.of(val);
}

return val;

};

我们可以像这样测试它:

Rx.Observable.any([1, 2, 3])
.map(v => {
console.log('val => ', v);
})
.subscribe();

Rx.Observable.any('abc')
.map(v => {
console.log('val => ', v);
})
.subscribe();

Rx.Observable.any(4)
.map(v => {
console.log('val => ', v);
})
.subscribe();


Rx.Observable.any(Rx.Observable.timer(100))
.map(v => {
console.log('val => ', v);
})
.subscribe();

但我正在寻找一种更规范的方法来做到这一点......

最佳答案

正如您在问题中所指出的,有 Observable.fromObservable.of

Observable.from接受一个可观察对象、一个 Promise 或一个数组(或者一个可迭代对象或类似数组的对象)的参数,并返回一个可观察对象 - 数组值单独发出。

Observable.of接受一个参数,该参数是要发出的值。

与 Promise 不同,不存在适合所有目的的单一策略 - 例如,有些操作符使用本身发出可观察值的可观察值。对于 promise 来说,这不是问题,因为它要么是 promise ,要么不是——而且一个 promise 解决另一个 promise 没有多大意义。

如果您可以制定适合您的策略,那么编写使用 Observable.fromObservable.of 实现的自己的函数应该非常简单。您需要决定的第一件事是如何处理数组:您想要一个发出数组本身的可观察对象还是单独发出数组值?

关于javascript - 类似于 Promise.resolve() 的 Observable 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41670004/

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