AWS Lambda не работает с `async`, только с обратными вызовами? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть функция Lambda в AWS с использованием Node 8.1, которая инициирует запрос 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

Однако , если я изменю код на асинхронную версию :

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 голосов
/ 18 февраля 2019

Удалите параметр обратного вызова и просто верните результат.Кроме того, вы можете избежать перехвата ошибок, если вам не нужно выполнять какую-либо специальную обработку

exports.handler = async (event, context) => {
  const pool = await sql.connect(config);
  return await pool
    .request()
    .query('select * from img.dbo.images where imageid = 1641');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...