首页 > 解决方案 > 无法使用“return of(false)”返回布尔值

问题描述

我的目标是加载一些数据,将其存储并返回truefalse给请求方法。我的想法是执行操作,然后返回 (true)创建一个 observable。我有以下方法。

setValidations(): Observable<boolean> {
  ...
  this.http.get<Validation[]>(url)
    .subscribe(
      suc => {
        environment.validations = suc;
        return of(true);
      },
      err => of(false)
    );
}

计算机抱怨我需要返回Observable类型的东西,所以我得出的结论是我在语法上失败了。我如何解决它?

根据答案/评论进行编辑

setValidations(): Observable<boolean> {
  ...
  return this.http.get<Validation[]>(url)
    .pipe(
      map(_ => { console.log("success"); return of(true); }),
      catchError => { console.log("success"); return of(false); }
    );
}

我改变了如上所示的方法。它似乎有效,但会产生一个关于名为catchError的阴影变量的警告。有点担心我在这里做得不太好。

标签: angulartypescriptrxjsobservable

解决方案


error一个void回调;你不能从那里回来,没有机会。从语义上讲,在你到达那里的那一刻,你就完蛋了;根据定义,rxjs就像next*(complete|error)事件流一样,所以一旦看到第一个(实际上是单个)错误,它就会崩溃。要处理可能的错误并保持您的实例有效,您必须通过操作员获取pipe您的原始实例(文档和示例在此处)。ObservercatchError

setValidations(): Observable<boolean> {
  ...
  return this.http.get<Validation[]>(url)
    .pipe(
      tap(suc => environment.validations = suc),
      map(() => true),
      catchError(() => of(false))
    );
}

推荐阅读