首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当从异步函数返回承诺时会发生什么?

当从异步函数返回承诺时会发生什么?
EN

Stack Overflow用户
提问于 2019-01-10 17:34:14
回答 2查看 99关注 0票数 0

如果一个函数返回一个Promise并标记为async,它是否返回Promise<Promise<DoWorkResponse>>

tslint告诉我,我应该将函数标记为异步。我担心我正在以某种方式加倍地包装Lambda客户端返回的承诺。

代码语言:javascript
运行
复制
const doWork = async (event: MyEvent): Promise<DoWorkResponse> => {
  return new Lambda({ region: process.env.region })
    .invoke({
      FunctionName: process.env.doWorkLambdaName,
      InvocationType: 'RequestResponse',
      LogType: 'Tail',
      Payload: JSON.stringify(event),
    })
    .promise()
    .then((response: Lambda.InvocationResponse) => {
      if (response.StatusCode !== 200) {
        const errorMessage = `Error occurred invoking DoWork Lambda. ${response}`;
        console.error(errorMessage);
        throw new Error(errorMessage);
      }
      return JSON.parse(response.Payload as string);
    });
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-10 17:46:02

它是返回Promise<Promise<DoWorkResponse>>吗?

不,一个承诺永远不会承诺。如果它获得了带有承诺的resolve()d,则承诺将解析为允诺值,在从异步函数返回时也会发生同样的情况。但是,您实际上可以在这里使用await来稍微简化代码:

代码语言:javascript
运行
复制
 async function doWork (event: MyEvent): Promise<DoWorkResponse> {
   const response = await new Lambda({ region: process.env.region })
    .invoke({
      FunctionName: process.env.doWorkLambdaName,
      InvocationType: 'RequestResponse',
      LogType: 'Tail',
      Payload: JSON.stringify(event),
    })
    .promise();

   if (response.StatusCode !== 200) {
     const errorMessage = `Error occurred invoking DoWork Lambda. ${response}`;
     console.error(errorMessage);
     throw new Error(errorMessage);
   }

   return JSON.parse(response.Payload as string);    
}
票数 1
EN

Stack Overflow用户

发布于 2019-01-10 17:36:28

好的,实际上异步函数将返回值转换为允诺,如果重发的值还不是承诺的话。如果它已经是一个承诺,它将得到回报,不会改变

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54134070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档