Javascript 如何避免由于异步调用而执行多步函数?

Javascript 如何避免由于异步调用而执行多步函数?,javascript,node.js,amazon-web-services,aws-lambda,aws-step-functions,Javascript,Node.js,Amazon Web Services,Aws Lambda,Aws Step Functions,我有一个Lambda可以触发一个阶跃函数。我试着将它从node.js10升级到nod.je 12,现在它启动了两步功能(两到三毫秒)。看起来它触发了两次,因为这里缺少异步概念效果。谁能给我解释一下吗 旧代码(工作) 新代码(执行Step函数double) 我也遇到过同样的问题,即使我返回了承诺 return stepfunctions.startExecution(params, function(err, data) { if (err) {return(err, data);}

我有一个Lambda可以触发一个阶跃函数。我试着将它从node.js10升级到nod.je 12,现在它启动了两步功能(两到三毫秒)。看起来它触发了两次,因为这里缺少异步概念效果。谁能给我解释一下吗

旧代码(工作)

新代码(执行Step函数double)


我也遇到过同样的问题,即使我返回了
承诺

  return stepfunctions.startExecution(params, function(err, data) {
    if (err) {return(err, data);} // an error occurred
    else     {return(null, data);} // successful response
  }).promise();
修复程序实际上是不提供回调:

return stepfunctions.startExecution(params).promise();
根据API文档,回调为:

从服务返回响应时调用。如果未提供回调,则必须对返回的请求对象调用AWS.Request.send()来启动请求

这让我觉得如果我不调用
send()
,就必须提供回调

另一方面,AWS Lambda将自动等待异步处理程序中的承诺。

对于返回承诺的库,可以直接将该承诺返回到运行时


我不确定是什么原因导致了双重调用,但如果回调是交易破坏者,它会让我认为回调会让处理程序等待,因为承诺被返回,Lambda会再次运行此代码吗?不知道,但很想知道。

我也遇到过同样的问题,即使我返回了
承诺

  return stepfunctions.startExecution(params, function(err, data) {
    if (err) {return(err, data);} // an error occurred
    else     {return(null, data);} // successful response
  }).promise();
修复程序实际上是不提供回调:

return stepfunctions.startExecution(params).promise();
根据API文档,回调为:

从服务返回响应时调用。如果未提供回调,则必须对返回的请求对象调用AWS.Request.send()来启动请求

这让我觉得如果我不调用
send()
,就必须提供回调

另一方面,AWS Lambda将自动等待异步处理程序中的承诺。

对于返回承诺的库,可以直接将该承诺返回到运行时


我不确定是什么原因导致了双重调用,但如果回调是交易破坏者,它会让我认为回调会让处理程序等待,因为承诺被返回,Lambda会再次运行此代码吗?不知道,很想知道。

开始执行之前,您的原始代码没有调用它的
回调
。新代码将忽略
startExecution
的结果,并立即解析
async
函数返回的承诺。为什么这会导致双重执行,我不能说。在执行
startExecution
之前,您的原始代码没有调用它的
callback
。新代码将忽略
startExecution
的结果,并立即解析
async
函数返回的承诺。我不能说为什么这会导致双重处决。