Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AWS SDK时,Promise中随后的.then()没有';不要等待上一个.then()完成_Javascript_Node.js_Aws Lambda - Fatal编程技术网

Javascript 使用AWS SDK时,Promise中随后的.then()没有';不要等待上一个.then()完成

Javascript 使用AWS SDK时,Promise中随后的.then()没有';不要等待上一个.then()完成,javascript,node.js,aws-lambda,Javascript,Node.js,Aws Lambda,我在这个世界上太天真了。为什么我的Javascript承诺没有按预期工作?我想console.log(“更新配置”)已完成。提前感谢您的帮助 注意:“检查存储桶”功能持续检查S3存储桶每隔几秒钟存在一次,直到创建S3存储桶为止 process.env.AWS_PROFILE = 'aquarius'; process.env.AWS_SDK_LOAD_CONFIG = 'true'; var AWS = require('aws-sdk'); AWS.config.update({regio

我在这个世界上太天真了。为什么我的Javascript承诺没有按预期工作?我想
console.log(“更新配置”)console.log(“检查bucket”)之前,不会执行code>已完成。提前感谢您的帮助

注意:“检查存储桶”功能持续检查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 
  });
});

谢谢大家的反馈和提示。我发现我可以直接从AWS SDK函数中检索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 
  });
})
//创建S3服务对象
var s3=新的AWS.s3({
apiVersion:‘2006-03-01’
});
变量参数={
Bucket:bucketName,
ACL:“公共阅读”
};
var promiseObject=s3.createBucket(参数,函数(错误,数据){
console.log(“创建bucket”);
如果(错误){
console.log(err,err.stack);//发生错误
}否则{
console.log(数据);//成功
}

}).promise();//这似乎与以下问题完全相同:在
then()
中包装代码并不能神奇地将其变成承诺。如果
s3.createBucket()
没有返回承诺,则将其包装在
中()
不会等待任何结果。似乎接受了回调(例如,没有
承诺
返回)。即使有,在当前代码中也会忽略它。事实上,在超时解析后调用的函数除了隐式的
undefined
之外,没有返回任何内容。不过
waitFor
也是如此。使用回调时,您不应该传递回调,只需将日志放在
然后
捕获
回调中即可。@GreenLake4964有一件事要提,不管您的问题是什么。导入
var AWS=require('AWS-sdk')这整件事会降低lambda性能。仅导入所需的模块。