我已经在TypeScript中编写了此函数:
export class LoginService {
async isLoggedIn(): boolean {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行Angular 6应用程序时,出现以下错误消息:
src / app / login.service.ts(28,23)中的错误:错误TS1055:类型'boolean'在ES5 / ES3中不是有效的异步函数返回类型,因为它没有引用Promise兼容的构造函数值。
我之前在其他应用程序中使用过async / await,而之前并没有实现。
更新:我想回答的问题是:如何获取“ isLoggedIn”函数以返回布尔值?
jfr*_*d00 18
一个async函数只能通过定义async返回承诺-所有函数都返回承诺。它不能返回布尔值。
这就是TypeScript告诉您的。该async函数可以返回解析为布尔值的Promise。
您return在async函数内部获得的值将成为async函数返回的承诺的可解析值。因此,async函数的返回类型是一个promise(解析为布尔值)。
的调用者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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的端点/api/user/isLoggedIn仅返回一个布尔值,您应该能够通过强制转换 http get 方法来使用下面的内容。但实际上你只能从异步函数返回一个承诺。
export class LoginService {
async isLoggedIn(): Promise<boolean> {
return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以有一个isLoggedIn()像这样消耗的异步函数:
async doSomething() {
const loggedIn: boolean = await service.isLoggedIn();
if (loggedIn) {
doThis();
}
}
Run Code Online (Sandbox Code Playgroud)
这将被称为这样
await doSomething();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13670 次 |
| 最近记录: |