javascript - Lambda 函数从一个不起作用的函数返回一个 Promise
问题描述
我正在使用节点 js 处理 lambda 函数。我调用了一个返回承诺的函数,然后我调用了一个promiseAll。我的第一个函数根据 ID 获取行表单 DB,如果行不存在,我想返回错误响应,如果存在,它应该调用 promiseAll。
以下是我的代码:
return getDetailsOfRow(id).then(function() {
return Promise.all([
getDetailsOfA(query1),
getDetailsOfB(query2),
getDetailsOfC(tripLocationsQuery)
]).then(function(values) {
return combineResults();
})
});
function getDetailsOfRow(trip) {
return new Promise((resolve, reject) => {
con.query(query, id, (err, results, fields) => {
if (err) {
reject(err);
}
if (results.length < 1) {
createErrorResponse();
} else {
//get the set column values to use for other function
}
});
});
}
function createErrorResponse() {
return new Promise((resolve, reject) => {
var response = {
"isBase64Encoded": false,
"statusCode": 404,
"headers": {
"Content-Type": "text/html"
},
"body": "Invalid Key"
};
resolve(response);
});
}
lambda 函数不会调用 createErrorResponse 方法中的 promise。我没有从 lambda 函数得到任何响应。我没有找到任何解决方案。是因为如果从 getDetailsOfRow() 调用 createErrorResponse() ,我会在承诺中返回承诺吗?
解决方案
您不需要将createErrorResponse
函数包装在承诺中。
添加 createErrorResponse()
解决或拒绝并添加catch
块getDetailsOfRow
以捕获错误。
尝试这个
return getDetailsOfRow(id).then(function() {
return Promise.all([
getDetailsOfA(query1),
getDetailsOfB(query2),
getDetailsOfC(tripLocationsQuery)
]).then(function(values) {
return combineResults();
}).catch( error => {
return error;
});
});
function getDetailsOfRow(trip) {
return new Promise((resolve, reject) => {
con.query(query, id, (err, results, fields) => {
if (err) {
reject(err);
}
if (results.length < 1) {
reject(createErrorResponse());
} else {
//get the set column values to use for other function
}
});
});
}
function createErrorResponse() {
return {
isBase64Encoded: false,
statusCode: 404,
headers: {
"Content-Type": "text/html"
},
body: "Invalid Key"
};
}
推荐阅读
- r - 使用 scale_fill_binned() 时如何使用特定的填充颜色?
- python - 用字符串计算 64 岁以上的人
- java - 数组中数字的循环移位(Java)
- java - 如何向被请求方发送客户端的 SOAP 响应
- ruby-on-rails - ActionView::Template::Error(未定义的方法 `empty?' for nil:NilClass):
- sql - 如何实现关键字层次结构
- c# - Entity Framework Core 5.0 - 多对多与映射表中的附加字段
- angular - 尝试监视 moment.js 函数时出现问题
- java - java石英调度程序在来自Oracle表的特定时间运行
- amazon-web-services - AWS ELB - ECS - RDS 堆栈延迟