在Typescript中使用异步函数返回值

Roy*_*asr 5 javascript asynchronous typescript

我具有以下TS功能:

CheckRegUser(u: User): boolean {
    let b: boolean = true;
    let toSend = {
      email: u.email
    };
    this.http.post("http://localhost:8080/", toSend).subscribe((data: Valid) => {
      if(!data.validity){
        b = false;
      }
    });
    console.log(b);
    return b;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我连接到ExpressJS后端,并且返回了布尔结果。这部分工作正常,但是问题在于,在“ this.http”中更改b的值之前,已执行“ return b”语句,因此无论Express的响应如何,b始终为true。

我知道TS和JS是异步的,因此会导致此问题,但是我找不到解决我问题的正确方法。任何帮助,将不胜感激。

brk*_*brk 5

您可以尝试 async await

  async CheckRegUser(u: User): Promise<boolean> {

    let toSend = {
      email: u.email
    };
    let k = await this.http.post("http://localhost:8080/", toSend).subscribe((data: Valid){
      let b: boolean = true;
      if(!data.validity){
        b = false;
      }
      return b
    });
    console.log(k);
    return k;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这意味着CheckRegUser将不返回布尔值,而是Promise &lt;boolean&gt;,并且应在调用代码中相应地进行处理(通过“ then”或“ async / await”)。 (2认同)
  • 承诺不是价值!为什么这是公认的答案? (2认同)