我有一个包装在异步函数中的DynamoDB Put请求。
async function putter(param1, param2) {
const paramsPut = {
TableName: MyTableName,
Item: {
"hashKey": param1,
"sortKey": param2,
}
};
dynamodb.put(paramsPut, function(err, data) {
if (err) {
console.log("Failure")
console.log(data)
return data
}
else {
console.log("Success")
console.log(data)
return data
}
});
};
异步函数的返回值放置在响应函数中-该函数应在执行放置操作(成功或不成功)后提供一个承诺。
然后我从另一个异步函数中调用此异步放置函数:
var param1 = "50";
var param2 = "60";
async function main() {
await putter(param1 , param2)
console.log("Feedback received")
}
当我调用此aysnc主函数时,我希望它在写入“ Feedback receive”之前提供put函数的Success语句,因为它应等待put函数的响应。
但是我的控制台记录 “收到反馈” 之前 在put async函数中记录“成功”语句 正在等待。
我在这里想念什么?感谢您的支持!
答案 0 :(得分:1)
尝试如下更改代码:
try {
const data = await dynamodb.put(paramsPut).promise()
console.log("Success")
console.log(data)
return data
} catch (err) {
console.log("Failure", err.message)
// there is no data here, you can return undefined or similar
}
几乎所有AWS开发工具包中的函数都具有promise()
变体,以将结果作为Promise返回。然后,您可以等待Promise。不要将回调与promise(async / await)混合使用,这会使代码难以阅读,最好在任何地方都使用一种技术。