首页 > 解决方案 > 如果 http.get 在 Guard canActivate 函数中成功,则返回 true 的函数

问题描述

我想创建一个函数,如果 http.get 成功则返回 true,否则返回 false。我正在尝试这样的事情:

  isOk() {
    let isOk;
    this.http.get('ip/api/isOk')
      .subscribe(x => { isOk = true; }, 
      (err) => { isOk = false; });
    return isOk;
  }

但它返回undefined。我知道它是一个异步函数,所以它在http.get完成之前返回一个值。如何在从 REST API “接收”数据后创建一个返回真/假的函数?

编辑:我想在 Guard 函数中使用这个canActivate函数。我不知道如何用 observable 构造 IF 语句。

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
      let x = this.someService.isOk();
      if(...){//if isOk return true
         return true;
      }else{
        this.router.navigate(['/login']);
      }
  }

标签: angulartypescript

解决方案


您正在尝试混合不兼容的东西:同步和异步代码。http.get是异步的,这意味着完全遵循:在大多数情况下,当您的代码返回给调用者时还没有结果;这就是为什么undefined返回的唯一合理价值。

一旦你坚持异步工作流,就永远保持下去。在您的特定情况下,您可能希望返回Observable<boolean>给调用者并让它subscribe()而不是自己做。考虑pipe()map()tap()定义为Observable<>. rxjs文档


推荐阅读