javascript - 函数不会等到其他函数完成执行
问题描述
问题:
我写了一个函数来判断某个桶是否存在。如果它存在,我会将一些东西上传到我的存储桶中,否则我会创建所述存储桶,然后继续上传我的东西。
但是,我的工作流程遇到了一些麻烦。如果我的桶不存在。该零件//upload my stuff
的到达速度比ensureBucketExists()
创建我的存储桶的速度要快。
来源: AWS Create S3 Bucket if None Exists
的文档如何测试 AWS S3 上是否存在存储桶
我的代码:
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
andawait
但我不知道它们并且似乎在正确实现它们时遇到了问题。
解决方案
你的假设async
是await
正确的。作为讲座,我可以向您推荐有关异步编程原理的这一章。
为了实现您的意图,我增强了您的代码:
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();
推荐阅读
- excel - 如果 5 个单元格值更改为某个值,则需要取消隐藏一行
- python - Jupyter notebook 命令在命令行中被识别但不运行并冻结
- sql-server - 使用 TOP 和 UNION 时的意外结果
- python-3.x - 使用 os.walk 的循环只运行第一个循环
- flutter - StreamBuilder 仅在我使用按钮更改状态时重新呈现数据
- javascript - 如何在反应中重置选择下拉值
- java - Class 类型中的方法 foo(T[]) 不适用于参数(Vector
) - angularjs - select2使用angularJs默认多选与动态标签错误
- histogram - 在 Grafana 图形直方图中显示百分比
- jquery - 当网站缩小/处于移动模式时,如何在引导程序 4 中放置 2 个 div 的内容?