javascript - Promise.all não funciona no código AWS Lambda
Eu testei este código localmente várias vezes, mas após a implantação na AWS, ele parou de funcionar. Eu acabei de adicionar um código simples para testar o Promise.all, mas a função não espera de forma alguma. O que estou fazendo de errado aqui?
export const myHandler = async (event, context, callback) => {
console.log(event)
await getParam().then(
(resolvedValue) => {
createBuckets()
},
(error) => {
console.log(get(error, 'code', 'error getting paramstore'))
return { test: error }
}
)
async function createBuckets() {
console.log(`inside createbuckets`)
const timeOut = async (t: number) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Completed in ${t}`)
}, t)
})
}
await timeOut(1000).then((result) => console.log(result))
await Promise.all([timeOut(1000), timeOut(2000)])
.then(() => console.log('all promises passed'))
.catch(() => console.log('Something went wrong'))
}
}
Minha função createBuckets era uma const e também uma arrow function. mas por algum motivo, mesmo assim aparecia como undefined quando eu a deployava. Quando eu mudei para function createBuckets, começou a funcionar.
Resposta #1
Como o Matt já mencionou nos comentários, você precisa return createBuckets() no callback .then para que funcione corretamente.
Eu também acho que misturar async/await e .then/.catch pode ser um pouco confuso, então é melhor seguir com um ou outro na maior parte do tempo.
Aqui está como eu reescreveria seu código:
const timeOut = (t: number) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Completed in ${t}`)
}, t)
})
}
async function createBuckets() {
console.log(`inside createbuckets`)
const result = await timeOut(1000);
console.log(result);
await Promise.all([timeOut(1000), timeOut(2000)])
console.log('all promises passed')
// The Promise from timeOut cannot reject, so there's no point in catching it.
// If you need to catch the error when you perform some real work, then you can
// use try/catch.
}
export const myHandler = async (event, context, callback) => {
console.log(event)
try {
const param = await getParam()
await createBuckets()
} catch (error) {
console.log(error)
return { test: error }
}
}
