我将一个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
}
});
};
异步功能的返回放在响应函数中--这应该在put操作执行后提供一个承诺(成功或不成功)。
然后,我从另一个异步函数调用这个异步put函数:
var param1 = "50";
var param2 = "60";
async function main() {
await putter(param1 , param2)
console.log("Feedback received")
}
当我调用这个aysnc主函数时,我希望它在编写“收到的反馈”之前提供put函数的成功声明,因为它应该等待put函数响应。
但是,我的控制台将的“反馈”记录在put异步函数中,在等待的put异步函数中记录“成功”语句的优先。
我在这里错过了什么?多谢你们的支持!
发布于 2019-05-05 15:26:42
尝试更改代码,如下所示:
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()
变体作为保证返回结果。那你就等着承诺吧。不要将回调与承诺(异步/等待)混为一谈--这会使代码难以阅读,最好在任何地方都坚持一种技术。
https://stackoverflow.com/questions/55993448
复制相似问题