Javascript AWS云锋Lambda@Edge奇怪的异步/回调用法

Javascript AWS云锋Lambda@Edge奇怪的异步/回调用法,javascript,lambda,amazon-cloudfront,aws-lambda-edge,Javascript,Lambda,Amazon Cloudfront,Aws Lambda Edge,我正在尝试从服务器发送事件lambda@edge到我们的服务器。但我不想“阻挡”云端。 为了做到这一点,我写道:(示例) 为了回答这个问题,我向mimc发送了一个4秒发送请求,请求是httpbin.ord/delay/4 正如您所看到的,为了释放Cloudfront并保持请求流动,我在一开始就做了callback(null,req)。在此之后,我将执行4秒钟的发送请求(发送功能) 有人告诉我,我不能在同一个处理程序上使用async和callback //or like that (only as

我正在尝试从服务器发送
事件
lambda@edge到我们的服务器。但我不想“阻挡”云端。
为了做到这一点,我写道:(示例)

为了回答这个问题,我向mimc发送了一个4秒发送请求,请求是
httpbin.ord/delay/4

正如您所看到的,为了释放Cloudfront并保持请求流动,我在一开始就做了
callback(null,req)
。在此之后,我将执行4秒钟的发送请求(发送功能)

有人告诉我,我不能在同一个处理程序上使用
async
callback

//or like that (only async):
exports.handler = async (event) => {
  const req = event.Records[0].cf.request;

  ???
};

//or like that (only callback):
exports.handler = (event, callback) => {
  const req = event.Records[0].cf.request;

  ???
};
但出于某种原因,它对两者都有效

当我(通过Cloudfront)浏览网站时,我在4秒钟内没有被阻止。
如果我将回调移到承诺的resolve部分,如下所示:

exports.handler = async (event, _, callback) => {
  const req = event.Records[0].cf.request;

  //callback(null, req);           <------- REMOVED
  return send(event, req);
};

function send(event, req) {
...

   return new Promise(function (resolve, reject) {
      const hReq = https.request(options, hRes => {
        console.log('response:' + hRes.statusCode);
        callback(null, req);            <------------- ADDED
      });
      hReq.on('error', (error) => {
        console.log(error);
      });
      hReq.end();
    });
}
exports.handler=async(事件、事件、回调)=>{
const req=event.Records[0].cf.request;
//回调(null,req){
console.log('response:'+hRes.statusCode);
回调(null,req){
console.log(错误);
});
hReq.end();
});
}
并开始浏览网站,每个请求需要4秒钟

因此,我的问题是:

  • 它如何在同一个处理程序上使用
    async
    callback
  • 云锋Lambda@Edge文档表示,请求将被阻止,直到lambda完成。
    但是我的请求没有被屏蔽,即使lambda需要4秒运行。为什么?
  • 谢谢你的帮助

    exports.handler = async (event, _, callback) => {
      const req = event.Records[0].cf.request;
    
      //callback(null, req);           <------- REMOVED
      return send(event, req);
    };
    
    function send(event, req) {
    ...
    
       return new Promise(function (resolve, reject) {
          const hReq = https.request(options, hRes => {
            console.log('response:' + hRes.statusCode);
            callback(null, req);            <------------- ADDED
          });
          hReq.on('error', (error) => {
            console.log(error);
          });
          hReq.end();
        });
    }