この関数をTypeScriptで記述しました。
export class LoginService {
async isLoggedIn(): boolean {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
Angular 6アプリケーションを実行しようとすると、次のエラーメッセージが表示されます。
Src/app/login.service.ts(28,23)のエラー:エラーTS1055:タイプ 'boolean'は、Promise互換のコンストラクター値を参照しないため、ES5/ES3で有効な非同期関数の戻り型ではありません。
以前に他のアプリケーションでasync/awaitを使用したことがあります。
更新:私が答えたい質問は、「isLoggedIn」関数を取得してブール値を返すにはどうすればよいですか?
async
関数は、定義によってのみプロミスを返すことができます-すべてのasync
関数はプロミスを返します。ブール値を返すことはできません。
それがTypeScriptが伝えていることです。 async
関数は、ブール値に解決されるプロミスを返すことができます。
return
関数内でasync
する値は、async
関数が返すプロミスの解決された値になります。したがって、async
関数の戻り値の型はプロミス(ブール値に解決される)です。
isLoggedIn()
の呼び出し元は、.then()
を使用するか、await
を使用する必要があります。
export class LoginService {
async isLoggedIn(): Promise<any> {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
エンドポイント/api/user/isLoggedIn
がブール値のみを返す場合、http getメソッドをキャストすることで以下を使用できるようになります。しかし、実際には、非同期関数からのみpromiseを返すことができます。
export class LoginService {
async isLoggedIn(): Promise<boolean> {
return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
}
}
次のようなisLoggedIn()
を消費する非同期関数を使用できます。
async doSomething() {
const loggedIn: boolean = await service.isLoggedIn();
if (loggedIn) {
doThis();
}
}
このように呼ばれます
await doSomething();