AWS Lambda不适用于`async`,仅适用于回调?

时间:2019-02-17 22:37:27

标签: node.js amazon-web-services async-await aws-lambda

我在使用Node 8.1的AWS中具有Lambda函数,该函数可发起MSSQL请求(发给不在AWS中的外部服务器)

当我将非async处理程序与非异步代码(但使用回调)一起使用时

exports.handler = (event, context, callback) => {...}

—一切正常。

证明:对于此代码,它使用回调-

exports.handler = (event, context, callback) => {
     sql.connect(config, err => {
        if (err) {
          callback(err);
        } else {
          const req = new sql.Request();
          req.query(
            'select * from img.dbo.images where imageid = 1641',
            (error, result) => {
              if (error) {
                callback(error);
              } else {
                sql.close();
                callback(null, result.recordset);
              }
            }
          );
        }
      });
};

我收到此回复:

enter image description here

但是,如果我更改代码to the async version

exports.handler = async (event, context, callback) => {
  try {
    let pool = await sql.connect(config);
    let result1 = await pool
      .request()
      .query('select * from img.dbo.images where imageid = 1641');

    callback(null, result1.recordset);
  } catch (err) {
    callback(err);
  }
};

-我收到超时错误(确保它与未履行承诺有关):

enter image description here

问题

为什么async版本不起作用?我该如何运作?

1 个答案:

答案 0 :(得分:2)

删除回调参数,只返回结果即可。另外,除非需要进行特殊处理,否则可以避免捕获错误

exports.handler = async (event, context) => {
  const pool = await sql.connect(config);
  return await pool
    .request()
    .query('select * from img.dbo.images where imageid = 1641');
}