异步函数的返回类型必须是全局 Promise<T> 类型
Posted
技术标签:
【中文标题】异步函数的返回类型必须是全局 Promise<T> 类型【英文标题】:The return type of an async function must be the global Promise<T> type 【发布时间】:2019-07-11 13:02:54 【问题描述】:为什么 TSlint 仍然说“异步函数或方法的返回类型必须是全局 Promise 类型”?
我不明白出了什么问题。
更新:
【问题讨论】:
我想成功不是布尔类型。尝试在res...
之前的返回中添加双重否定!!
,如果错误仍然存在,请告诉我
@MU,我也试过这个和明确的演员表
@MU,我认为 tslint 无法正常工作,但我不知道如何修复它
您是否尝试删除 : Promiseresult.data.success
确实是 boolean 类型,而不是用引号括起来的布尔值,这使它成为一个字符串,比如“true”而不是true
.能否请您在浏览器控制台的“网络”选项卡中检查,或者在该方法上放置一个断点?
【参考方案1】:
尝试返回与Promise
的预期泛型类型相对应的Promise
-wrapped 值,如下所示:
@Action
public async register(registerInfo: Account): Promise<boolean>
const res = await http.post('users/', registerInfo);
return new Promise<boolean>((resolve, reject) =>
resolve(res.data.success);
// Or reject() if something wrong happened
);
// Or simply return a resolved Promise
return Promise.resolve(res.data.success);
其实你应该也可以then()
结果:
@Action
public async register(registerInfo: Account): Promise<boolean>
return await http
.post('users/', registerInfo)
.then(res => res.data.success);
【讨论】:
属性 'resolve' 不存在于类型 '我认为问题在于您试图返回 await 的结果,而不是捕获结果并对其进行处理:
@Action
public async register(registerInfo: Account): Promise<boolean>
const result = await http.post('users/', registerInfo);
return result.data.success;
【讨论】:
【参考方案3】:http.post
方法返回Observable
类型,可以使用toPromise()
方法将其转换为Promise。
喜欢 - http.post.toPromise()
【讨论】:
以上是关于异步函数的返回类型必须是全局 Promise<T> 类型的主要内容,如果未能解决你的问题,请参考以下文章
useState 与异步函数返回 Promise <pending>
在异步函数或 Promise 中设置全局变量的值? [复制]