【问题标题】:lambda node.js async function can't access to callbackslambda node.js 异步函数无法访问回调
【发布时间】:2021-04-04 20:34:26
【问题描述】:

我正在使用异步函数,但在访问回调函数时遇到了问题。

我可以 console.log(req) 成功但不能 (res) 也不能 (body)

callbackfunction里面的console.log都没有显示,我只得到(req) response

module.exports.handler = async function (event,context){

               let result = await s3.listObjects(params).promise();
                console.log(result.Contents);

                var req = http.request(post_options,function(res) {
                    console.log("resresresresresres");
                   console.log("statusstatusstatustats");
                   console.log("headersheadersheaders");
                   res.setEncoding('utf8');
                   res.on('data', (chunk) => {
                       console.log("body");
                   });
                });
            console.log(req)
              
                }

我也尝试过这种方式,我得到了相同的结果,只显示 (req)

module.exports.handler = async function (event,context){

                    let result = await s3.listObjects(params).promise();
                    console.log(result.Contents);

                var req = http.request(post_options,res=> {
                    console.log("resresresresresres");
                   console.log("statusstatusstatustats");
                   console.log("headersheadersheaders");
                   res.setEncoding('utf8');
                   res.on('data', (chunk) => {
                       console.log("body");
                   });
                });
            console.log(req)
              
                }

【问题讨论】:

  • 您的 http.request() 可能遇到错误,并且您没有错误处理程序。添加一些类似于req.on('error', error => { console.error(error) })的内容
  • 我什么都没有,和之前的console.logs一样
  • console.log(req)上方添加req.on('error', e=> console.log(e))并查看日志

标签: node.js asynchronous amazon-s3 aws-lambda callback


【解决方案1】:

承诺 http.request 调用。

function postCall(postOptions) {
     http.request(postOptions, function(res) {
         console.log("resresresresresres");
         console.log("statusstatusstatustats");
         console.log("headersheadersheaders");
         res.setEncoding('utf8');
         res.on('data', (chunk) => {
            return chunk;
         });
     });
    }
    
or

function postCall(postOptions) {
 return new Promise((resolve, reject) => {
   http.request(postOptions, function(res) {
     console.log("resresresresresres");
     console.log("statusstatusstatustats");
     console.log("headersheadersheaders");
     res.setEncoding('utf8');
     res.on('data', (chunk) => {
        resolve(chunk);
     });
 });
 })
}

Then Lambda function

module.exports.handler = async function (event,context){
  let result = await s3.listObjects(params).promise();
  console.log(result.Contents);
  // please define post request params i.e postOptions
  const response = await postCall(postOptions);
  console.log(response);
}

【讨论】:

  • 我尝试了第一种方法,结果很糟糕。Tahnk 你。
猜你喜欢
  • 2015-01-22
  • 2013-05-15
  • 2015-07-08
  • 2019-07-25
  • 2017-03-20
  • 1970-01-01
  • 2020-06-04
  • 2019-01-20
  • 2017-07-12
相关资源
最近更新 更多