为什么在异步函数中未执行带有回调的函数?

邓肯·奥利奥

我正在使用AWS开发工具包,并且正在使用Lambda运行此代码。我注意到,当我在异步函数内部使用带有回调的上载函数时,它不执行该函数。

const aws = require('aws-sdk');

exports.handler = async (event) => {
  const s3 = new aws.S3();
  console.log('START UPLOAD')

  const params = {
    Bucket: 'practice-bucket',
    Key: 'hello.txt',
    Body: "hello",
  }
  
  s3.upload(params, function(err, data) {
    console.log(err, data);
  });

};

我知道如何使这项工作。通过将函数更改为非异步函数,或者通过使用await并将upload()的响应转换为promise。但是我仍然很好奇为什么它不执行upload()函数?我期望它只是执行一个常规功能,因为我没有告诉它等待。

大卫·韦伯斯特

如果您的函数在s3.upload完成之前返回,这就是Javascript的事件循环与异步函数一起工作的方式。

您可以通过将s3.upload转换为Promise,然后使用await获取结果并阻止异步处理程序的返回来解决此问题。

await result = s3.upload(params).promise();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章