async function getP(){
var params = {
Name: 'MY-NAME',
WithDecryption: true
};
var request = await ssm.getParameter(params).promise();
return request.Parameter.Value;
}
async function getParam(){
var resp = await getP()
console.log(resp)
}
getParam()
这是我的lambda函数内部的代码,目前无法正常工作,我不确定为什么。
当我将其更改为:
const x = getParam()
console.log(x) // it says that this is pending
但是我认为异步等待解决了,有什么想法吗?
编辑:
console.log('first') // never logged
const res = await ssm.getParameter(paramUsername).promise(); // paramUsername deffo exists in SSM
console.log(res, 'res') // never logged
console.log('second') // never logged
答案 0 :(得分:0)
粗略的回答,您有两个选择,我需要其中的一个输出...
1)
function to(promise) {
return promise.then((data) => {
return [null, data]
}).catch(err => [err])
}
// YOUR CODE AMENDED
console.log('first') // never logged
let [err, res] = await to(ssm.getParameter(paramUsername).promise());
if(err){
console.log(err)
return
}
console.log(res, 'res') // never logged
console.log('second') // never logged
OR
2)将该呼叫包含在try catch中,如下所示:
try {
console.log('first') // never logged
const res = await ssm.getParameter(paramUsername).promise(); // paramUsername deffo exists in SSM
console.log(res, 'res') // never logged
console.log('second') // never logged
} catch(e){
console.log(e)
}
让我知道错误是什么,我敢打赌您的lambda没有访问SSM的权限!将会更新!
答案 1 :(得分:0)
有同样的问题-我发现唯一有效的组合就是在等待后什么都不做,除了一旦解决就返回承诺即可。
因此,如果您将代码更改为:
async function getP(){
var params = {
Name: 'MY-NAME',
WithDecryption: true
};
// Do not do anything after the await, only the return
var request = await ssm.getParameter(params).promise();
return request.Parameter;
}
async function getParam(){
// Do not do anything after the await, only the return
var resp = await getP()
return resp.Value;
}
const val = getParam();
console.log(val);
它应该在lambda内部工作。这似乎很古怪-我发现从命令行或在调试器中运行我的原始代码版本,效果很好。只是在lambda容器内(在AWS或docker中),它没有解决,只是掉了下来-没有抛出任何错误。
有几个与此主题相关的主题(请参见下文),希望对您有所帮助。
答案 2 :(得分:0)
用作波纹管
def squareEach(nums):
square = []
for number in nums:
number = number ** 2
square.append(number)
return square