【发布时间】:2021-08-19 06:19:09
【问题描述】:
我已经在本地多次测试过这段代码,但在 AWS 上部署后,它就停止了工作。我刚刚添加了简单的代码来测试 Promise.all,但该函数根本不等待。我在这里做错了什么?
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'))
}
}
我的 createBuckets 函数也是一个 const 和箭头函数。但由于某种原因,即使在我部署它时也显示为未定义。当我将其更改为函数 createBuckets 时,它开始工作了。
【问题讨论】:
-
试试
return createBuckets()。当使用.then时,需要返回一个承诺以等待它。在这种情况下,undefined返回,而asynccreateBuckets在事件循环的下一个刻度上运行 -
另外,使用
async/await比混入.thenpromise API 更容易。
标签: javascript node.js typescript aws-lambda promise