繁体   English   中英

TypeScript Async/Await 箭头函数:正确的语法(在 React 中)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM