angular - 错误:类型不是 ES5/ES3 中的有效异步函数返回类型,因为它没有引用与 Promise 兼容的构造函数
问题描述
我在 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”函数返回布尔值?
解决方案
一个async
函数只能根据定义返回一个 Promise - 所有async
函数都返回 Promise。它不能返回布尔值。
这就是 TypeScript 告诉你的。该async
函数可以返回一个解析为布尔值的承诺。
您return
在函数中的值成为函数返回async
的承诺的解析值。async
因此,您的函数的返回类型async
是一个承诺(解析为布尔值)。
will的调用者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;
}
}
推荐阅读
- laravel - Laravel Dingo 类不存在
- javascript - 无法在网页上获取 m4a 音频文件的长度
- python - AttributeError: 'list' 对象没有属性 'symmetric_difference' 初学者错误
- javascript - 使用 gulp 与 webpack-stream 和 babel loader 来转换 jsx
- arrays - 我找不到为什么我的 C 代码没有编译而另一个正在运行两者几乎相同
- mysql - 如何使用 MySQL 声明开始日期和结束日期
- r - 构建 R 包时如何向导出的数据添加列表?
- passport.js - 带 Gatsby 注销的 Passport-Local 未完全注销
- javascript - 是否可以在特征检测中包装 core-js polyfill?
- laravel - 我应该使用 FormRequest 的 prepareForValidation 来传递验证请求的参数吗?