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.