Javascript 函数不会等待其他函数完成执行

Javascript 函数不会等待其他函数完成执行,javascript,node.js,amazon-s3,Javascript,Node.js,Amazon S3,问题: 我编写了一个函数来确定某个bucket是否存在。如果它存在,我会上传一些东西到我的bucket中,否则我会创建这个bucket,然后继续上传我的东西 但是,我的工作流程有一些问题。如果我的桶不存在。//上传我的东西比ensurebacktexists()创建我的bucket要快 来源: 我的代码: let s3BucketName = 'myBucket'; const s3 = new AWS.S3({ // Connection }); const uploadT

问题:
我编写了一个函数来确定某个bucket是否存在。如果它存在,我会上传一些东西到我的bucket中,否则我会创建这个bucket,然后继续上传我的东西

但是,我的工作流程有一些问题。如果我的桶不存在。
//上传我的东西
ensurebacktexists()
创建我的bucket要快

来源:


我的代码:

let s3BucketName = 'myBucket';

const s3 = new AWS.S3({
    // Connection 
});

const uploadToS3Bucket = () => {
    ensureBucketExists();
    // upload my stuff...
}

const ensureBucketExists = () => {
    let bucketParams = {
        Bucket: s3BucketName
    };

    s3.headBucket(bucketParams, function(headError) {
        if (!headError) return;

        s3.createBucket(bucketParams, function(createError) {
            if (!createError) console.log(`Created new ${s3BucketName}.`)
        });
    });
};

uploadToS3Bucket();
  • 我假设我必须以某种方式使用
    async
    wait
    ,但我不知道它们,并且似乎在正确实现它们时遇到了问题

    • 您对
      async
      wait
      的假设是正确的。作为一次讲座,我可以向你推荐这一章关于校长的内容

      为了实现您的目标,我增强了您的代码:

      let s3BucketName = 'myBucket';
      
      const s3 = new AWS.S3({
          // Connection 
      });
      
      const uploadToS3Bucket = async () => {
          await ensureBucketExists();
          // upload my stuff... 
      }
      
      const ensureBucketExists = async () => {
          let bucketParams = {
             Bucket: s3BucketName
          };
      
          await s3.headBucket(bucketParams, function(headError) {
              if (!headError) return;
      
              s3.createBucket(bucketParams, function(createError) {
                  if (!createError) console.log(`Created new ${s3BucketName}.`)
              });
          });
      };
      
      uploadToS3Bucket();
      

      不能以这种方式使用回调,然后返回值<代码>返回bucketExists总是在bucketExists=null!==数据已执行。我需要如何修复此问题?我怎样才能告诉我的代码等待执行某项任务?我认为你应该花一两个小时熟悉异步技术和概念,从长远来看,这将使生活变得更加轻松。@Robert,你能给我推荐一些东西吗?