J'ai écrit cette fonction dans TypeScript:
export class LoginService {
async isLoggedIn(): boolean {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
Lorsque j'essaie d'exécuter l'application Angular 6, le message d'erreur suivant s'affiche:
ERREUR dans src/app/login.service.ts (28,23): erreur TS1055: le type 'boolean' n'est pas un type de retour de fonction asynchrone valide dans ES5/ES3 car il ne fait pas référence à une valeur de constructeur compatible avec Promise.
J'ai utilisé asynchrone/wait dans d'autres applications avant sans frapper cela avant.
MISE À JOUR: La question que je voudrais obtenir une réponse est: comment puis-je obtenir la fonction "isLoggedIn" pour renvoyer un booléen?
Une fonction async
peut SEULEMENT renvoyer une promesse par définition - toutes les fonctions async
renvoient des promesses. Il ne peut pas retourner un booléen.
C'est ce que TypeScript vous dit. La fonction async
peut renvoyer une promesse qui se résout en un booléen.
La valeur que vous return
à l'intérieur de votre fonction async
devient la valeur résolue de la promesse renvoyée par la fonction async
. Ainsi, le type de retour pour votre fonction async
est une promesse (qui se résout en un booléen).
L'appelant de isLoggedIn()
devra soit utiliser .then()
avec elle, soit await
avec elle.
export class LoginService {
async isLoggedIn(): Promise<any> {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
Si votre point final /api/user/isLoggedIn
Ne renvoie qu'une valeur booléenne, vous devriez simplement pouvoir utiliser ci-dessous en convertissant la méthode http get. Mais en effet, vous ne pouvez que renvoyer une promesse d'une fonction asynchrone.
export class LoginService {
async isLoggedIn(): Promise<boolean> {
return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
}
}
Vous pourriez avoir une fonction asynchrone qui consomme isLoggedIn()
comme ceci:
async doSomething() {
const loggedIn: boolean = await service.isLoggedIn();
if (loggedIn) {
doThis();
}
}
Qui s'appellerait comme ça
await doSomething();