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

我正在使用 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() 的响应转换为promise。但我仍然好奇为什么它不执行 upload() 函数?我希望它只是执行一个常规函数,因为我没有告诉它等待。


www说
浏览 86回答 1
1回答

慕标5832272

这就是 Javascript 的事件循环如何与异步函数配合使用,在您的情况下,函数在 s3.upload 完成之前返回。您可以通过将 s3.upload 转换为 Promise,然后使用 wait 获取结果并阻止异步处理程序的返回来解决此问题await result = s3.upload(params).promise();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript