Javascript Lambda函数返回函数不工作的承诺
我正在使用NodeJS处理lambda函数。我调用一个函数,返回一个承诺,然后我调用一个promiseAll。我的第一个函数根据ID获取一个行形式的DB,若该行不存在,我想返回错误响应,若存在,它应该调用promiseAll 以下是我的代码:Javascript Lambda函数返回函数不工作的承诺,javascript,node.js,aws-lambda,Javascript,Node.js,Aws Lambda,我正在使用NodeJS处理lambda函数。我调用一个函数,返回一个承诺,然后我调用一个promiseAll。我的第一个函数根据ID获取一个行形式的DB,若该行不存在,我想返回错误响应,若存在,它应该调用promiseAll 以下是我的代码: 返回getDetailsOfRow(id)。然后返回(function(){ 回报你的承诺([ getDetailsOfA(查询1), getDetailsOfB(查询2), getDetailsOfC(tripLocationsQuery) ]).然后(
返回getDetailsOfRow(id)。然后返回(function(){
回报你的承诺([
getDetailsOfA(查询1),
getDetailsOfB(查询2),
getDetailsOfC(tripLocationsQuery)
]).然后(函数(值){
返回combineResults();
})
});
函数GetDetailsFrow(行程){
返回新承诺((解决、拒绝)=>{
con.query(查询,id,(错误,结果,字段)=>{
如果(错误){
拒绝(错误);
}
如果(结果长度<1){
createErrorResponse();
}否则{
//获取用于其他函数的设置列值
}
});
});
}
函数createErrorResponse(){
返回新承诺((解决、拒绝)=>{
var响应={
“isBase64Encoded”:false,
“状态代码”:404,
“标题”:{
“内容类型”:“文本/html”
},
“正文”:“无效密钥”
};
决心(回应);
});
}
未为lambda函数调用createErrorResponse方法内的Promission。我没有从lambda函数得到任何响应。我没有找到任何解决办法。是因为如果从getDetailsOfRow()调用createErrorResponse(),我将br在承诺中返回一个承诺吗?您不需要在承诺中包装
createErrorResponse
函数
在resolve或reject中添加createErrorResponse()
,并在getDetailsOfRow
中添加catch
块以捕获错误
试试这个
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"
};
}
返回getDetailsOfRow(id).then(函数(){
回报你的承诺([
getDetailsOfA(查询1),
getDetailsOfB(查询2),
getDetailsOfC(tripLocationsQuery)
]).然后(函数(值){
返回combineResults();
}).catch(错误=>{
返回误差;
});
});
函数GetDetailsFrow(行程){
返回新承诺((解决、拒绝)=>{
con.query(查询,id,(错误,结果,字段)=>{
如果(错误){
拒绝(错误);
}
如果(结果长度<1){
拒绝(createErrorResponse());
}否则{
//获取用于其他函数的设置列值
}
});
});
}
函数createErrorResponse(){
返回{
isBase64Encoded:false,
状态代码:404,
标题:{
“内容类型”:“文本/html”
},
正文:“无效密钥”
};
}
我发现这里有两个问题
- 您正在将
的代码包装在promise中,这不是必需的李>createErrorResponse
- 您没有在
方法中解析,因此无法实现承诺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 {
resolve(results); // it should be resolved.
}
});
});
}
function createErrorResponse() {
return {
isBase64Encoded: false,
statusCode: 404,
headers: {
"Content-Type": "text/html"
},
body: "Invalid Key"
};
}
返回getDetailsOfRow(id)。然后返回(function(){
回报你的承诺([
getDetailsOfA(查询1),
getDetailsOfB(查询2),
getDetailsOfC(tripLocationsQuery)
]).然后(函数(值){
返回combineResults();
}).catch(错误=>{
返回误差;
});
});
函数GetDetailsFrow(行程){
返回新承诺((解决、拒绝)=>{
con.query(查询,id,(错误,结果,字段)=>{
如果(错误){
拒绝(错误);
}
如果(结果长度<1){
拒绝(createErrorResponse());
}否则{
解析(结果);//应该解析它。
}
});
});
}
函数createErrorResponse(){
返回{
isBase64Encoded:false,
状态代码:404,
标题:{
“内容类型”:“文本/html”
},
正文:“无效密钥”
};
}
我没有收到任何错误,但也没有收到任何响应。我可以看到{“errorType”:“error”,“errorMessage”:“[object object]”,“stack”:[“error:[object object object]”,“at homogeneousError(/var/runtime/CallbackContext.js:13:12)”,“at postError(/var/runtime/CallbackContext.js:30:51)”,“at done(/var/runtime/CallbackContext.js:57:7)”,“at fail(/var/runtime/CallbackContext.js:69:7)”,“at/var/runtime/CallbackContext.js:105:16”,“at process.\u tickCallback(internal/process/next_tick.js:68:7)”]cloud watch Logs中的错误解决catch块中的日志并查看错误是什么。我正在用GetDetails中得到的结果解决承诺。Row可以看到{“errorType”:“error”,“errorMessage”:“[object object]”,“stack”:[“error:[object object]”,“at _homogeneousError(/var/runtime/CallbackContext.js:13:12)”,“at postError”(/var/runtime/CallbackContext.js:30:51)”,“完成时(/var/runtime/CallbackContext.js:57:7)”,“失败时(/var/runtime/CallbackContext.js:69:7)”,“在/var/runtime/CallbackContext.js:105:16”,“在进程时”。\u tickCallback(internal/process/next\u tick.js:68:7)]云监视日志中的错误很难理解。您能将错误消息字符串化吗?