Я создал очень короткий / простой пример проблемы с 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
?Я пробовал несколько разных итераций и не могу заставить это работать так, как я ожидаю.