使用AWS开发工具包时,Promise中的后续.then()不会等待之前的.then()完成

时间:2020-08-18 04:45:40

标签: javascript node.js aws-lambda

我对JS世界太天真了。为什么我的Javascript Promise无法正常工作?我认为console.log("update configs");将在console.log("checking bucket");完成之前不被执行。预先感谢您的帮助。

注意:“检查存储桶”功能连续检查S3存储桶每隔几秒钟就存在一次,直到创建S3存储桶为止。

process.env.AWS_PROFILE = 'aquarius';
process.env.AWS_SDK_LOAD_CONFIG = 'true';


var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});

// Create S3 service object
s3 = new AWS.S3({apiVersion: '2006-03-01'});

let bucketName = "mybucket.test.com"

// Create S3 service object
var s3 = new AWS.S3({
  apiVersion: '2006-03-01'
});

var promise = new Promise(function(resolve, reject) {
  setTimeout(function() {
      resolve('hello world');
  }, 1);
});

promise.then(function(data) {
  var params = {
    Bucket: bucketName,
    ACL: "public-read"
  };
  s3.createBucket(params, function(err, data) {
    console.log("creating bucket");
    if (err) {
      console.log(err, err.stack); // an error occurred
    } else {
      console.log(data); // successful 
    }
  });
})
.then(function(data) {
  console.log("checking bucket");
  var params = {
    Bucket: bucketName
  };
  s3.waitFor('bucketExists', params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log("bucket exist");           // successful response
  });
})
.then(function(data) {
  console.log("update configs");
  var params2 = {
    Bucket: bucketName,
    ContentMD5: "",
    WebsiteConfiguration: {
      ErrorDocument: {
        Key: "error.html"
      },
      IndexDocument: {
        Suffix: "index.html"
      }
    }
  };
  s3.putBucketWebsite(params2, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data); // successful 
  });
});

1 个答案:

答案 0 :(得分:0)

感谢大家的反馈和提示。我发现我可以直接从AWS开发工具包函数检索Promise对象。这是现在可以使用的修改后的代码。

// Create S3 service object
var s3 = new AWS.S3({
  apiVersion: '2006-03-01'
});

var params = {
  Bucket: bucketName,
  ACL: "public-read"
};

var promiseObject = s3.createBucket(params, function(err, data) {
  console.log("creating bucket");
  if (err) {
    console.log(err, err.stack); // an error occurred
  } else {
    console.log(data); // successful 
  }
}).promise();  // <=== THIS LINE SAVED MY DAY !!

promiseObject.then(function(data) {
  console.log("checking bucket");
  var params = {
    Bucket: bucketName
  };
  s3.waitFor('bucketExists', params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log("bucket exist");           // successful response
  });
})
.then(function(data) {
  console.log("update configs");
  var params2 = {
    Bucket: bucketName,
    ContentMD5: "",
    WebsiteConfiguration: {
      ErrorDocument: {
        Key: "error.html"
      },
      IndexDocument: {
        Suffix: "index.html"
      }
    }
  };
  s3.putBucketWebsite(params2, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data); // successful 
  });
})
相关问题