[英]TypeScript Async/Await Arrow Function: Right Syntax (in React)
我有一个箭头函数,它比较两个值。 一个值来自另一个函数,该函数从 API 端点获取值。 我想使用 await / async 样式而不是 Promises(.then、.catch、.finaly)。
在 JavaScript 中这很容易,但我在使用 TypeScript 时遇到了一些问题。 如何正确编写该函数?
我有这样的东西(伪代码):
compareValues: Promise<boolean> = async () => {
try {
const value1 = false;
const value2 = this.getValue2;
const isEqual = (await value2) === value1;
return isEqual;
} catch (error) {
throw error;
}
}
getValue2 = async () => {
try {
const value2 = await axios.get(url, config);
const value2Data = await value2.data;
return value2Data;
} catch (error) {
throw error;
}
export interface IInterface {
compareValues: () => Promise<boolean>;
}
const initialState: IInterface = {
compareValues: () => {
return Promise.resolve(false);
}
}
使用该代码,IDE 为第一行哭泣: Type '() => Promise' 缺少来自类型 'Promise' 的以下属性: then, catch, [Symbol.toStringTag]
虽然编译器告诉:类型 'Promise' 不可分配给类型 '() => Promise'。 类型 'Promise' 与签名 '(): Promise' 不匹配。 TS2322
我感觉我的返回类型是错误的...
代码会将我的isEqual
值包装在 Promise 中吗?
我可以避免两个函数都是异步的吗?
什么是正确的语法?
先感谢您!
@VLAZ 发现了错误并在评论中很好地解释了它。 我仍然想发布一个包含新更改的版本。
我将第一个代码块更改为:
compareValues: = async () => {
try {
const value1 = false;
const value2 = this.getValue2;
const isEqual = (await value2) === value1;
return isEqual;
} catch (error) {
throw error;
}
}
原因(在评论中解释): compareValues 持有一个函数,该函数在调用时会产生一个承诺。 它本身并不是一个真正的 Promise。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.