如何使用 Observable 级联 AJAX 多种方法

How to use the Observable cascade AJAX multiple methods

live exmaple

我本以为它会按顺序打印:

可以执行下面的代码,请问还有没有其他的写法

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>