为什么可观察的`of()`没有执行next()?

时间:2019-02-21 19:55:31

标签: angular rxjs

我有这种情况:

 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()导航到用户路线;

我在做什么错了?

3 个答案:

答案 0 :(得分:0)

类似于this answer,但由于版本不同而异,您需要使用of({}).pipe(take(1))创建一个可观察的空对象,然后调用next。

输入您的代码

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您使用创新运算符EMPTY

,会更干净

文档说:

可观察到的立即完成。

创建一个Observable,该Observable不会向观察者发出任何项目,并立即发出完整的通知。


示例:

// RxJS v6+
import { EMPTY } from 'rxjs';

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