ios - 无法让 Lambda 函数发回信息
问题描述
我刚刚编写了我的第一个 Lambda 函数,但此时它不起作用。我在代码中尝试了许多变体;部分追随我能想到的,部分追随我在网上可能遇到的;但都失败了。
我希望 Lambda 函数列出 UserPool 中的用户并获取作为参数传递的给定子的电子邮件。
这是调用 Lambda 函数的 Swift 函数:
func getLambdaInfo() {
let lambdaInvoker = AWSLambdaInvoker.default(),
jsonObject:[String: Any] = ["sub" : "MY-USER-SUB"]
lambdaInvoker.invokeFunction("myLambdaFunc", jsonObject: jsonObject)
.continueWith(block: {
(task:AWSTask<AnyObject>) -> Any? in
if( task.error != nil) {
print("Error: \(task.error!)")
return nil
}
print("\(#function) ---- WE ARE HERE!!!!")
// Handle response in task.result:
if let JSONDictionary = task.result as? NSDictionary {
print("Result: \(JSONDictionary)")
}
return nil
})
}
这是 Lambda 函数:
var AWS = require('aws-sdk/dist/aws-sdk-react-native');
exports.handler = async (event,context) => {
var params = {
UserPoolId: 'MY-POOL-ID',
AttributesToGet: ['email'],
Limit: '2'
};
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
cognitoidentityserviceprovider.listUsers(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
// How can I get this data sent in the response is probably the issue ??
});
const response = {
inBound: event.sub,
statusCode: 200,
body: JSON.stringify('Hello from Lambda!')
};
return response;
}
以下是在 Xcode 调试控制台中可以看到的内容:
getLambdaInfo() ---- WE ARE HERE!!!!
Result: {
body = "\"Hello from Lambda!\"";
inBound = "MY-USER-SUB";
statusCode = 200;
}
我希望拥有比我更多的 AWSLambda 的人能够给我一些关于我需要在代码中进行更改以获得我想要的结果(电子邮件地址)的提示(进入我的 Swift getLambdaInfo())。
解决方案
您需要return
在以下回调中移动您的语句listUsers
:
cognitoidentityserviceprovider.listUsers(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
// return a 500 error ?
}
else {
console.log(data);
const response = {
inBound: event.sub,
statusCode: 200,
body: JSON.stringify(data)
}
return response;
}
});
由于您使用的是该async
模式,您还可以执行以下操作:
try {
const data = await cognitoidentityserviceprovider.listUsers(params).promise() // note the await and .promise() here
const response = {
inBound: event.sub,
statusCode: 200,
body: JSON.stringify(data)
}
return response;
} catch (err) {
// do something with err
}
否则,您的 Lambda 函数会在执行回调之前返回(JavaScript 的异步性质)。
推荐阅读
- mysql - 在 laravel 中保存下拉列表值
- angular - 页面转换很慢并且与 ionic 5 中的 ionic Angular 路由重叠
- r - 如果满足条件,将值保持在行中
- android - 我无法让 Android Studio 和 gradle 工作以将我的应用程序添加到 android 应用程序包中
- javascript - 检查 div 是否有 xx 类来隐藏和显示父元素
- algorithm - 仅最优 - 最少停靠点和哪些停靠点
- javascript - jest --watch 由临时文件触发
- c# - 分区输入和并行执行查询
- r - 从 R 调整 c3 绘图的线条粗细
- java - JPA 异常:org.hibernate.MappingException:无法确定类型