Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RXJS修改订阅服务器的顺序_Javascript_Rxjs_Rxjs Observables - Fatal编程技术网

Javascript RXJS修改订阅服务器的顺序

Javascript RXJS修改订阅服务器的顺序,javascript,rxjs,rxjs-observables,Javascript,Rxjs,Rxjs Observables,是否可以确保订阅服务器是观察者队列中最后执行的?延迟(0)对我来说是没有选择的,因为我需要代码以行而不是异步方式执行 let observable = new Subject<void>(); //delay(0) no option! observable.pipe().subscribe(() => console.log("I want to be last!")); observable.subscribe(() => console.log

是否可以确保订阅服务器是观察者队列中最后执行的?延迟(0)对我来说是没有选择的,因为我需要代码以行而不是异步方式执行

let observable = new Subject<void>();

//delay(0) no option!
observable.pipe().subscribe(() => console.log("I want to be last!"));
observable.subscribe(() => console.log("I want to be first!"));

observable.next();
let observable=新主题();
//延迟(0)无选项!
observable.pipe().subscribe(()=>console.log(“我想成为最后一个!”);
observable.subscribe(()=>console.log(“我想成为第一”);
可观察的。下一步();
我在这里创建了一个示例:

我希望第一个订阅服务器最后执行。当前控制台输出为:

我想成为最后一个

我想成为第一


您可以使用所需的输出创建2个可观察对象,然后使用mergeMap操作符来保持顺序

const observable1 = Observable.of("I want to be first!");
const observable2 = Observable.of("I want to be last!");

observable1
  .mergeMap(x => {
    console.log(x);
    return observable2;
  })
  .subscribe(x => console.log(x));
您也可以使用一个共同的主题作为观察对象之间的交流方式,如下所示:

const observable = new Subject<void>();
const commonSub$ = new Subject();

observable.pipe().subscribe(() => {
  commonSub$
    .subscribe(() => {
      console.log('I want to be last!');
    });
});

observable.subscribe(() => {
  console.log('I want to be first!');
  commonSub$.next(true);
});

observable.next();

你为什么在乎?如果你对此有疑问,它暗示了更深层次的问题。订阅者应该是独立的。我需要在所有事件发布后调用Angular的cdr。我可以在调用主语之后调用它,或者,我认为更好的是,在调用主语之后调用它。但由于它不是cdr专用的,所以我没有提及它,因为它不会造成不必要的混乱。我喜欢你的想法,但无法让它发挥作用。为了说明我的问题,我对它做了一些修改:我需要多次调用“observes1”(它被用作外部事件)。现在,在调用所有订阅服务器之后,我需要运行我的内部代码。您可以修改此属性,使其甚至可以处理多个事件吗?更新答案,让我知道你的想法。
observable
   .switchMap(() => {
      return commonSub$;
   })
   .subscribe(() => {
      console.log("I want to be last!");
   });

observable.subscribe(() => {
   console.log("I want to be first!");
   commonSub$.next(true);
});