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

Javascript 从异步函数返回承诺时会发生什么?,javascript,amazon-web-services,lambda,async-await,aws-sdk,Javascript,Amazon Web Services,Lambda,Async Await,Aws Sdk,如果函数返回一个Promise并标记为async,它是否返回Promise tslint告诉我应该将函数标记为异步。我担心我不知何故双重包装了Lambda客户端返回的承诺 const doWork = async (event: MyEvent): Promise<DoWorkResponse> => { return new Lambda({ region: process.env.region }) .invoke({ FunctionName: p

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

tslint
告诉我应该将函数标记为异步。我担心我不知何故双重包装了
Lambda
客户端返回的承诺

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);
    });
};
constdowork=async(事件:MyEvent):Promise=>{
返回新Lambda({region:process.env.region})
.调用({
函数名:process.env.doWorkLambdaName,
调用类型:“RequestResponse”,
日志类型:“Tail”,
有效负载:JSON.stringify(事件),
})
.承诺
.然后((响应:Lambda.InvocationResponse)=>{
如果(response.StatusCode!==200){
const errorMessage=`调用DoWork Lambda时出错。${response}`;
控制台错误(错误消息);
抛出新错误(errorMessage);
}
返回JSON.parse(response.Payload作为字符串);
});
};

没关系,如果重新调整的值还不是承诺,实际上异步函数会将返回值转换为承诺。如果它已经是一个承诺,那么它将返回而不做任何更改

没关系,实际上异步函数将返回值转换为一个承诺,如果重新调整的值还不是一个承诺。如果它已经是一个承诺,那么它将不加改变地被退回

它是否返回了承诺

不,承诺永远不会变成承诺。如果它获得带有承诺的
resolve()
d,承诺将解析为承诺值,从异步函数返回时也会发生同样的情况。但是,您实际上可以在此处使用
wait
将代码展平一点:

 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);    
}
异步函数doWork(事件:MyEvent):Promise{ const response=wait new Lambda({region:process.env.region}) .调用({ 函数名:process.env.doWorkLambdaName, 调用类型:“RequestResponse”, 日志类型:“Tail”, 有效负载:JSON.stringify(事件), }) .promise(); 如果(response.StatusCode!==200){ const errorMessage=`调用DoWork Lambda时出错。${response}`; 控制台错误(错误消息); 抛出新错误(errorMessage); } 返回JSON.parse(response.Payload作为字符串); } 它是否返回了承诺

不,承诺永远不会变成承诺。如果它获得带有承诺的
resolve()
d,承诺将解析为承诺值,从异步函数返回时也会发生同样的情况。但是,您实际上可以在此处使用
wait
将代码展平一点:

 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);    
}
异步函数doWork(事件:MyEvent):Promise{ const response=wait new Lambda({region:process.env.region}) .调用({ 函数名:process.env.doWorkLambdaName, 调用类型:“RequestResponse”, 日志类型:“Tail”, 有效负载:JSON.stringify(事件), }) .promise(); 如果(response.StatusCode!==200){ const errorMessage=`调用DoWork Lambda时出错。${response}`; 控制台错误(错误消息); 抛出新错误(errorMessage); } 返回JSON.parse(response.Payload作为字符串); }
谢谢!这就是我所希望的。谢谢!这就是我所希望的。这个扁平化的代码正是我所想的。实际上,我打算用它来让事情变得更简单<代码>常量[错误,响应]=等待(新Lambda({region:process.env.region}))。。。如果(error | | response.statusCode!==200){//Handle error}这个扁平化的代码正是我所想的。实际上,我打算用它来让事情变得更简单<代码>常量[错误,响应]=等待(新Lambda({region:process.env.region}))。。。if(error | | response.statusCode!==200){//Handle error}