如何使用 Observable 级联 AJAX 多种方法
How to use the Observable cascade AJAX multiple methods
我本以为它会按顺序打印:
- 发送 Ajax 结果前打开加载屏幕
- 得到AJAX个结果和记录
- 关闭加载屏幕
可以执行下面的代码,请问还有没有其他的写法
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>
请注意,当您编写 Rx.Observable.of(myFunc1())
时,myFunc1
会立即执行并且它的 return 值(在您的例子中是 undefined
,因为它有 none) 将是可观察对象的单个事件值。
(与 subscribe
相同的问题,当您传递 console.log("complete")
的 return 值时需要回调)
在最后一部分写 .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>
我本以为它会按顺序打印:
- 发送 Ajax 结果前打开加载屏幕
- 得到AJAX个结果和记录
- 关闭加载屏幕
可以执行下面的代码,请问还有没有其他的写法
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>
请注意,当您编写 Rx.Observable.of(myFunc1())
时,myFunc1
会立即执行并且它的 return 值(在您的例子中是 undefined
,因为它有 none) 将是可观察对象的单个事件值。
(与 subscribe
相同的问题,当您传递 console.log("complete")
的 return 值时需要回调)
在最后一部分写 .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>