Javascript Lambda函数返回函数不工作的承诺

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) ]).然后(

我正在使用NodeJS处理lambda函数。我调用一个函数,返回一个承诺,然后我调用一个promiseAll。我的第一个函数根据ID获取一个行形式的DB,若该行不存在,我想返回错误响应,若存在,它应该调用promiseAll

以下是我的代码:

返回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”
},
正文:“无效密钥”
};
}

我发现这里有两个问题

  • 您正在将
    createErrorResponse
    的代码包装在promise中,这不是必需的
  • 您没有在
    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)]云监视日志中的错误很难理解。您能将错误消息字符串化吗?