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

Why does function with callback not executed inside an async function?

我正在使用 AWS SDK,并且我 运行 此代码使用的是 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() 的响应转换为承诺。但是我还是很好奇为什么不执行upload()函数呢?我希望它只是执行一个常规函数,因为我没有告诉它等待。

这就是 Javascript 的事件循环与异步函数一起工作的方式,在您的情况下,函数在 s3.upload 完成之前 returning。

您可以通过将 s3.upload 转换为 promise 然后使用 await 获取结果并阻止异步处理程序 return

来解决此问题
await result = s3.upload(params).promise();