首页 > 解决方案 > 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() ,我会在承诺中返回承诺吗?

标签: javascriptnode.jsaws-lambda

解决方案


您不需要将createErrorResponse函数包装在承诺中。

添加 createErrorResponse()解决或拒绝并添加catchgetDetailsOfRow以捕获错误。

尝试这个


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"
  };
}


推荐阅读