【问题标题】:How to get data.next() and data.complete() here in the following code?如何在下面的代码中获取 data.next() 和 data.complete() ?
【发布时间】:2021-02-22 17:43:21
【问题描述】:

如何在以下代码中获取 data.next() 和 data.complete()。这里的数据不是充当观察者吗?

当我尝试调用这些方法时出现错误

component.ts 文件

 this.authservice.registerform(form).subscribe(data => {
     data. ?
     this.ifsuccess = true;
     this.timer = setInterval(() => {
      this.router.navigate(['']);
     }, 1200);});

服务.ts

 registerform(data): Observable<any>{
return this.httpclient.post('http://localhost:3000/login',data);

}

我是 Angular 和 rxjs 的初学者。请帮忙。

【问题讨论】:

    标签: javascript angular typescript rxjs observable


    【解决方案1】:

    这里的数据不是充当观察者吗?

    不,在您的示例中,data 是发出的(“下一个”)值。

    订阅 observable 时,可以传递三个不同的参数,它们是 nexterrorcomplete 的处理程序。

    示例:

    someObservable$.subscribe(
        next => console.log(`next value is: ${next}`),
        err  => console.log(`error is: ${err}`),
        ()   => console.log('someObservable$ completed!) 
    );
    

    在您的情况下,您仅向 subscribe() 方法提供第一个处理程序。您只需使用参数名称data 即可访问下一个值:

    this.authservice.registerform(form).subscribe(
        data => {
            // 'data' refers to the emitted value
            this.ifsuccess = true;
            this.timer = setInterval(() => {
                this.router.navigate(['']);
            }, 1200);
        }
    );
    

    如果您需要处理完成或错误,只需提供其他处理程序即可:

    this.authservice.registerform(form).subscribe(
        data => {
            // 'data' refers to the emitted value
            this.ifsuccess = true;
            this.timer = setInterval(() => {
                this.router.navigate(['']);
            }, 1200);
        },
        error => console.log('error occurred!'),
        ()    => console.log('registerform call completed')
    );
    

    也可以将完整的观察者对象传递给subscribe() 方法,而不是单独的处理程序方法:

    const myObserver = {
        next:    val => console.log(`next val: ${next}`),
        error: error => console.log(`error: ${error}`),
        complete: () => console.log('complete!')
    };
    
    someObserver$.subscribe(myObserver);
    

    这是一个带有示例的StackBlitz

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 2014-07-12
      • 1970-01-01
      • 2019-11-05
      • 2021-12-21
      • 1970-01-01
      • 2011-11-11
      • 2017-03-05
      • 2013-07-16
      相关资源
      最近更新 更多