【问题标题】:Why`of()` observable is not executing next()?为什么`of()` observable 没有执行 next()?
【发布时间】:2019-07-15 20:21:16
【问题描述】:

我有这种情况:

 this._userService
            .create(user)
            .pipe(
                switchMap(res => {
                    if (this.accountStore.accounts.length > 0) {
                        return this._accountsService.manageAccounts(
                            accounts,
                            res.idUser
                        );
                    } else return of();
                })
            )
            .subscribe(
                _ => {
                    this._router.navigate(["/app/main/user/"]);
                },
                () => (this.saving = false)
            );

如果帐户高于 0,则可以正常工作。但是如果它转到 else 块,return of() 不会执行 next() 来导航到用户路由;

我做错了什么?

【问题讨论】:

  • 由于您没有将参数传递给of,因此没有什么可以发出。
  • 但我只想执行下一个函数而不发出任何值
  • 你不能。如果您不使用该值,您可能希望使用完整的处理程序。
  • 您也可以使用of(undefined)of(void 0)

标签: angular rxjs


【解决方案1】:

您需要将值传递给of 以执行下一个运算符或订阅者。在这种情况下,我只是将null 传递为of(null)

【讨论】:

    【解决方案2】:

    this answer类似,但版本不同,需要使用of({}).pipe(take(1))创建一个空对象observable并调用next。

    对于您的代码:

    ...
    } else return of({}).pipe(take(1));
    ...
    

    【讨论】:

    • 但这根本不会发出任何值,所以仍然无法命中 else 分支
    • 糟糕,很棒的收获。更新中
    【解决方案3】:

    如果你使用创建操作符EMPTY会更干净

    文档说:

    立即完成的 Observable。

    创建一个不向 Observer 发出任何项目并立即发出完整通知的 Observable。


    例子:

    // RxJS v6+
    import { EMPTY } from 'rxjs';
    
    //output: 'Complete!'
    const subscribe = EMPTY.subscribe({
      next: () => console.log('Next'),
      complete: () => console.log('Complete!')
    });
    
    stackblitz

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多