从 Promise 中解构响应
Posted
技术标签:
【中文标题】从 Promise 中解构响应【英文标题】:Destructuring Response from a Promise 【发布时间】:2020-12-04 06:15:27 【问题描述】:我正在深入研究承诺并试图实现这样的目标。我有异步功能的地方。
async function myFunc(): Promise< data: any >
return new Promise((resolve, reject) =>
resolve( data: item: "test" )
);
我想这样使用它:
const data = myFunc();
基本上就像 useQuery 在 apollo 客户端中的工作方式一样。
有什么方法可以做到这一点吗?我猜我已经偏离轨道了。我知道您可以使用 then 或 catch,但我特别希望遵循 useQuery 之类的模式。
【问题讨论】:
由于myFunc();
返回一个promise,你需要await
它来获取promise 解析的值。 await
只能在异步函数中使用。或者,您可以使用.then()
。兑现你的承诺
【参考方案1】:
您可以像这样在 async
函数中这样做:
const data = await myFunc();
或在非async
函数中这样:
myFunc()
.then((data) =>
// ...
)
// .catch here, probably
正如旁注一样,没有理由将函数显示为async
。如果您在函数中使用 await
并希望它自动创建基于函数内发生的事情解决的承诺,则只需要在函数上使用 async
。在您的函数中,您不使用await
,而是显式地创建了promise。 (但这可能只是一个占位符......)
【讨论】:
太快了...我只是在写那个:) 好的,这是有道理的。也许我问错了问题。我这样做是因为两个主要因素/假设:1) myFunc 的真正实现在其中调用了一个异步的第 3 方模块,因此我认为我需要使 myFunc 异步。 2) myFunc 将在反应组件中调用,因此使其“等待”会导致问题。 @user1148920 - 其中任何一个都可能是其自身的问题。 :-) 但是 FWIW:1) 如果 3rd 方模块的函数返回一个 promise,并且您想在调用它时使用await
,则您的函数需要为 async
。或者你可以使用 promise 的 .then
/.catch
。如果第 3 方函数是回调式的,最好在非async
函数中使用new Promise
。 2) 如果处理正确,可以在 React 中使用 async
和 await
不管叫什么)。 HTH! :-)以上是关于从 Promise 中解构响应的主要内容,如果未能解决你的问题,请参考以下文章
我期望从 API 响应中接收一组对象,但在使用 TypeScript 的 React 中获得一组 Promise
如何使用 fetch 从 Promise 回调中返回返回值? [复制]