将Observable.subscribe()返回的值分配给const

时间:2019-03-14 16:21:30

标签: javascript angular ionic4

我正在尝试从Ionic4-Angular前端向我的Django API发送请求,问题是我还不熟悉这种技术或JavaScript。 在下面的代码中,我试图返回订阅数据并将其分配给const。

async getUserLogged() {
    const tkn = await this.authService.getToken();
    const user = await this.http
      .post('http://localhost:8000/api/getuser/', {
        token: tkn
      })
      .subscribe(response => {
        console.log(response);
        return response;
      });
    console.log(user);

    return user;
  }

第一个console.log包含我要搜索的真实对象。 但是,第二个打印出一个Subscriber对象。 谁能向我解释这种行为以及如何解决

3 个答案:

答案 0 :(得分:1)

这是我设置此方法的方式:

getUserLogged() {
  return this.authService.getToken().pipe(
    switchMap(tkn=> {
      return this.http.post('http://localhost:8000/api/getuser/', {
        token: tkn
      })
   })
  );
}

然后按以下方式使用此方法:

getUserLogged().subscribe(userData => console.log(userData));

此方法使用switchMap运算符,该运算符仅在http.post返回令牌后才调用authService.getToken。您可以找到所有RxJs运算符here的文档。

答案 1 :(得分:-1)

subscribe

回调函数无法向user返回任何值。它只会得到您提到的Subscriber对象,这是可观察的结果。

如果您想使用asyncawait方法,则需要使用toPromise方法来实现可观察的承诺。

async getUserLogged() {
    const tkn = await this.authService.getToken();
    const user = await this.http
      .post('http://localhost:8000/api/getuser/', {
        token: tkn
      }).toPromise();
    console.log(user);

    return user;
  }

答案 2 :(得分:-1)

将可观察到的响应转换为承诺,可以轻松地从需要的地方致电。

const getUserLogged = () => {
    const tkn = await this.authService.getToken();
    return this.http
      .post('http://localhost:8000/api/getuser/', {
        token: tkn
      })
      .toPromise();
};

const someOtherFunc = async () => {
  const user = await getUserLogged();
  console.log({ user });
};