异步/伺机不能与AWS的S3的Node.js SDK工作
我创建了我与Promise
s利用aws-sdk
包Node.js的具有在脚本的问题在很短/简单的例子
总之,该脚本不是在await
关键字等。它通过循环回路,而无需等待async
功能在移动之前成功完成。
代码示例:
main.js
const AWS = require('aws-sdk')
import constants from '@/constants'
AWS.config.update({
accessKeyId: constants.awsAccessKey,
secretAccessKey: constants.awsSecretAccessKey,
region: constants.awsRegion
})
export const s3 = new AWS.S3({apiVersion: '2006-03-01'})
点击一些按钮,触发testS3()
方法...
testActions.js
import { s3 } from '@/main.js'
export async function testS3 () {
const testParams = {
Bucket: AWS_BUCKET,
Key: `test_file.txt`,
Body: 'Testing stuff'
}
async function testFunction(layer) {
console.log('in prepare design 1')
const result = await s3.putObject(testParams).promise()
console.log(`the results: ${result}`)
}
[1,2,3].forEach(async (x) => {
const result = await testFunction()
})
}
从调试器输出:
我期待的消息交织,这是有道理的,如果你遵循的逻辑流。
它应该是in prepare design 1
,然后显示the results...
,然后通过和做2次以上。
显示in prepare design 1
三次马上蝙蝠输出显示我环路没有继续之前等待功能。
我有没有设置async
/ await
错误以某种方式?我试过多种不同的迭代似乎并不能怎么样,我也期待得到这个工作。
所显示的行为是正确的,因为forEach
的处理也是一个async
功能:
async (x) => {
const result = await testFunction()
}
所以forEach
循环会立即运行3种异步功能。每个这些功能将await
的承诺链的其余部分是异步的。
如果你想有一个同步执行,使用普通的for循环:
for(var i=0; i<3; i++){
const result = await testFunction()
}