以下是一个使用AWS Lambda和Promises的示例代码,解决了回调没有被调用的问题:
// 引入AWS SDK和AWS Lambda模块
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
// 创建一个promise来调用AWS Lambda函数
function invokeLambdaFunction(params) {
return new Promise((resolve, reject) => {
lambda.invoke(params, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
});
}
// 在Lambda函数中使用promise
exports.handler = async (event, context) => {
try {
// 调用AWS Lambda函数
const params = {
FunctionName: 'yourLambdaFunctionName',
Payload: JSON.stringify(event),
};
const response = await invokeLambdaFunction(params);
// 处理Lambda函数的响应
console.log(response);
return response;
} catch (error) {
console.error(error);
throw error;
}
};
在上面的示例代码中,我们创建了一个invokeLambdaFunction
函数,它返回一个promise,并使用lambda.invoke
来调用AWS Lambda函数。在invokeLambdaFunction
函数中,我们使用了一个回调函数来处理调用的结果。如果调用成功,我们使用resolve
将结果传递给promise的then
方法;如果调用失败,我们使用reject
将错误传递给promise的catch
方法。
在Lambda函数的主体部分,我们使用async/await
来等待invokeLambdaFunction
函数的返回结果。这样,我们可以更方便地处理异步操作的结果。如果调用成功,我们将响应打印到控制台并返回响应;如果调用失败,我们打印错误并抛出错误,以便Lambda函数的调用者可以处理异常情况。
通过使用Promises和async/await
,我们可以更清晰地处理异步操作,并解决回调没有被调用的问题。