rxjs:observable.complete不是函数

时间:2018-11-29 11:56:23

标签: javascript rxjs reactive-programming

在下面的代码中,我尝试演示concatMap如何保留事件的顺序,即使对事件执行的操作未按顺序完成。

现在我得到了一个错误

  

delayerObservable.complete()不是函数

这基本上只是从教程中获取的。我先调用next(),然后再调用complete()。它应该可以工作,至少那是我的想法。

我可以通过返回randomDelayer.first()

实现所需的功能
auth()

但是我想从内部完成可观察到的事情,因为我可能希望发送的事件不仅仅是一个。

<h1> Hi there   {{ auth()->user()->username }}   you are logged in as Admin 

1 个答案:

答案 0 :(得分:1)

rxjs-framework的版本4和6之间似乎有很多更改。缺陷源的工作版本是这样的:

const { Observable } = rxjs;
const { map, filter, concatMap, pipe } = rxjs.operators;

console.log('Starting....');

const myTimer = Observable.create((observer) => {
  let counter = 0;
  setInterval( () => {
      counter++;
      if (counter < 10){
          console.log('nexting now with counter ' + counter);
          observer.next(counter);    
      } else {
          observer.complete();
      }
  },1000);
});

const myRandomDelayer = myTimer.pipe(
    concatMap( (value) => {
        const randomDelayer = Observable.create( (delayerObservable) => {
            const delay = Math.floor(Math.random()*5000);
            setTimeout(() => {
                delayerObservable.next('Hello, I am Number ' + value + ' and this was my delay: ' + delay);
                delayerObservable.complete();
            }, delay);
        });
        return randomDelayer;
    })
);

myRandomDelayer.subscribe( (message) => {
    console.log(message);
});