是否有像Promise.resolve()
這樣的Rx運算符,其中 可以將可觀察值或普通值解析爲普通值?類似的可觀察運算符Promise.resolve()
例如,我可以這樣做:
Promise.resolve(3)
.then(function(val){
console.log('val => ',val);
});
,當然還有,Promise.resolve()將接受一個承諾以及
但是,我很難找到一個類似的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();
,但我正在尋找一個更規範的方式做到這一點?
謝謝,在這種情況下,天真的答案是隻返回數組,而不是分別發出值。在我的問題中,我將Promise.resolve()與promise的整個企業混爲一談,然後在返回值上調用Promise.resolve,然後返回一個新的承諾。有點令人困惑,但我認爲你明白了。 –
這使得你的'Observable.any'實現稍微複雜一些,因爲你需要測試數組,數組類,iterables或'Observable.from'會將它們變成發射單獨值的觀察值。 – cartant
是的,與你提到的陣列的事情,這將弄亂我的Rx.Observable.any方法,所以我回到了一個 –