我原本预计它会按顺序打印:
可以执行以下代码,我想询问是否还有其他方法可以编写
var openLoadingPage$ = Rx.Observable.create(function(observer) {
console.log("open...");
observer.complete();
});
var closeLoadingPage$ = Rx.Observable.create(function(observer) {
console.log("close..");
observer.complete();
});
var ajax$ = Rx.Observable.create(function(observer) {
//todo:get ajax result
observer.next("hello world");
observer.complete();
});
var result$ = Rx.Observable.of(
openLoadingPage$,
ajax$.delay(2000),
closeLoadingPage$)
.concatAll();
result$.subscribe({
next: (value) => {
console.log("get ajax result:", value);
}
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.1/Rx.js"></script>
&#13;
答案 0 :(得分:1)
请注意,当您编写Rx.Observable.of(myFunc1())
时,myFunc1
会立即执行,其返回值(undefined
在您的情况下,因为它没有)将是单个事件值观察到。
(与subscribe
相同的问题,当您传递console.log("complete")
的返回值时,会接受回调
最后一部分写.subscribe(() => console.log("complete")
)可能会取得更大的成功。
对于func部分,很难说出你想要实现的目标,但这是一次尝试:
function myFunc1() {
console.log("myFunc subscribe called");
return "f1"
}
function myFunc2() {
console.log("myFunc2 subscribe called");
return "f2"
}
var myFunc1$ = Rx.Observable.defer(() => Rx.Observable.of(myFunc1()));
var myFunc2$ = Rx.Observable.defer(() => Rx.Observable.of(myFunc2()));
myFunc1$
.delay(2000)
.concat(myFunc2$)
.subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.1/Rx.js"></script>