我已经用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'在ES5 / ES3中不是有效的异步函数返回类型,因为它没有引用Promise兼容的构造函数值。
我之前在其他应用程序中都使用过async / await,而之前没有遇到过。
更新: 我想回答的问题是:如何获取“ isLoggedIn”函数以返回布尔值?
答案 0 :(得分:9)
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;
}
}
答案 1 :(得分:0)
如果端点/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();
答案 2 :(得分:-1)
我会说升级到ES6。
与其他回答中的对话相反,该回答说异步函数只能返回一个诺言,javascript.info的明确表达是,等待的诺言将返回原始值,就像您在自己的尝试中所做的那样。题。因此,我认为这是here
引起的ES5问题