如何解决使用AWS开发工具包时,Promise中的后续.then不会等待之前的.then完成
我对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,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,err.stack); // an error occurred
else console.log(data); // successful
});
});
解决方法
感谢大家的反馈和提示。我发现我可以直接从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,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,err.stack); // an error occurred
else console.log(data); // successful
});
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。