Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法在基于my NodeJS的lambda中回拨getSignedUrl中调用AWS SES sendEmail函数_Node.js_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Ses - Fatal编程技术网

Node.js 无法在基于my NodeJS的lambda中回拨getSignedUrl中调用AWS SES sendEmail函数

Node.js 无法在基于my NodeJS的lambda中回拨getSignedUrl中调用AWS SES sendEmail函数,node.js,amazon-web-services,amazon-s3,aws-lambda,amazon-ses,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Ses,我正在尝试从我的lambda发送通过使用aws ses调用S3的getSigned url获得的url,如下所示: exports.handler = async (event) => { ...... ..... var signedUrl = await s3.getSignedUrl( "getObject", parameters, (error, url) => { if (error) {

我正在尝试从我的lambda发送通过使用aws ses调用S3的getSigned url获得的url,如下所示:


exports.handler = async (event) => {
......
  .....
  var signedUrl = await s3.getSignedUrl(
    "getObject",
    parameters,
    (error, url) => {
      if (error) {
        console.log("Error writing to S3", error);
      } else {
        console.log("Pre-signed url: " + url);
        var eparam = {
          Destination: {
            CcAddresses: ["abc@abc.com"],
            ToAddresses: ["xyz@xyz.com"],
          },
          Message: {
            Body: {
              Html: {
                Charset: "UTF-8",
                Data: url // sending url as part of the email
              },
              Text: {
                Charset: "UTF-8",
                Data: "TEXT_FORMAT_BODY",
              },
            },
            Subject: {
              Charset: "UTF-8",
              Data: "Test email",
            },
          },
          Source: "abc@abc.com" /* required */,
          ReplyToAddresses: [
            "xyz@xyz.com",
          ],
        };
        console.log("compiling email... parameters ready", eparam);
        var sendPromise = new AWS.SES().sendEmail(eparam).promise();
        sendPromise
          .then(function (data) {
            console.log("Success!! ", data.MessageId);
          })
          .catch(function (err) {
            console.error(err, err.stack);
          });
      }
    }
  );
};

问题是我无法发送电子邮件,因为代码既没有输入sendPromise的“.then(函数(数据)”块,也没有捕获“.catch(函数(错误)”中的任何错误'部分。这里有什么我做错了吗?当我尝试在getSignedUrl方法的回调部分之外发送电子邮件时,我能够发送电子邮件(当然没有url!)但是,由于我们需要在电子邮件正文中嵌入url,因此我们必须能够在回调中嵌入url。我们可以采用任何方法吗?

您应该避免混合使用回调和承诺,因为您可能会遇到这样的问题。请尝试将
getSignedUrl
转换为:

另外,请确保您正在返回lambda处理程序的承诺:


如果您没有从异步处理程序返回承诺,lambda函数可能会在您的承诺得到解决之前完成。

感谢您快速而准确的响应。我们能够实现这一点:)