我有这样的角度服务:
saveNewUser(user: User): Observable<boolean> {
if (!user || !user.password) {
return of(false);
}
return this.http.put(this.saveUrl, user).pipe(map((res: Response) => res.ok));
}
我正在尝试一种方法,return of(false);
仅在saveNewUser(...)
的使用者订阅时返回。换句话说,总是返回可观察到的寒冷。
答案 0 :(得分:1)
如果我正确理解了您的问题,则您不希望在用户订阅之前对方法的第一部分进行评估。因此,如果最初用户对象的密码为空,然后在该对象上设置了密码,然后预订了可观察对象,则您希望结果为http.put()
的结果。
在下面的示例中,用户被包装到一个可观察对象中,直到订阅了该可观察对象后,管道的其余执行过程才会运行。
saveNewUser(user: User): Observable<boolean> {
return of(user).pipe(
switchMap(u => (!u || !u.password) ? of({ ok: false }) : this.http.put(this.saveUrl, u)),
map(res => res.ok)
);
}
这是一种非常尴尬的处理方式。一方面,如果传递的对象最初是未定义的,或者外部的引用已更改,则根本无法使用。更好的做法是在对用户的任何更改上创建Observable并传递其余逻辑,或者只是等待调用saveNewUser()
直到设置完数据。