简体   繁体   中英

How to wait promise resolve?

I'm trying to wait http request to resolve before returning a value, but await doesn't work (Here is my API call function, but when I'm executing it, I always get resolve: undefined in console.)

async getToken(): Promise<any> {
    return await this.storage.get('token').then(token => {
      console.log('appToken from storage is', token);
      if (token === null) {

          console.log('Getting token from API');
          const headers = new HttpHeaders({
              'Content-Type': 'application/x-www-form-urlencoded'
          });

          const postData = 'device_name='+((this.platform.is("ios")) ? "ios":"android");


          await this.http.post(server_url+'/api/register', postData, {headers})
            .toPromise()
            .then((data: TokenResponse) => {
              console.log('token from API is ',data.token);
              this.storage.set('token', data.token);
              this.storage.set('user_id', data.user_id);
              return Promise.resolve(data.token);
            }, error => {
              console.log('error getting user token', error);
              return Promise.reject(error);
            });



      } else {
        console.log('Got token from storage',token);
        return Promise.resolve(token);
      }
    });
  }

test_token_function() {

    this.getToken().then((resolve) => {
      console.log("resolve:" + resolve);
    }).catch((reject) => {
    console.log("reject:" + reject);
    });

  }

The await keyword will return the fulfilled value of a promise. So maybe try this approach instead.

const httpResult = await http.post(server_url+'/api/register', postData, {headers}).toPromise();

Now you can work with the data inside your httpResult.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM