Лямбда-запрос AWS с асинхронным водопадом в node.js 8.10 - PullRequest
0 голосов
/ 11 апреля 2019

отправляю два запроса последовательно Запрос данных из таблиц A, а затем в соответствии с результатом запрос данных из таблицы B.

Итак, я запрашиваю данные вот так,

var async = require('async');
var mysql = require('mysql');
var config = require('./config.json');
var connection = mysql.createConnection({
  host     : config.dbhost,
  user     : config.dbuser,
  password : config.dbpassword,
  database : config.dbname
});

exports.handler = (event, context, callback) => {
    // TODO implement
    var tasks = [
        function (callback) {
            connection.query("SELECT email FROM Visitor WHERE id =?;", [1], function (err, row) {
                if (err) return callback(err);
                if (row.length == 0) return callback('No Result Error');
                callback(null, row[0]);
            })
        },
        function (data, callback) {
            connection.query("SELECT id,signtime FROM Board WHERE email =?;", data.email, function (err, row) {
                if (err) return callback(err);
                if (row.length == 0) {
                  return callback('No Result Error');
                }else {
                  callback(null, row[0])
                }
            })
        }
    ];

    async.waterfall(tasks, function (err, result) {
        if (err)
          console.log('err');
        else
          ***return result;***
          console.log('done');
        connection.end();
    });
};

Я регистрирую данные с console.log (), он принимает данные в командной строке. Но в лямбде, поместите функцию в exports.handler, это ответ null. Если я изменяю 'возвращаемый результат' на обратный вызов (результат), возникает ошибка. Я думаю, что это может быть слишком просто, чтобы решить эту проблему Если вы знаете об этом, пожалуйста, помогите мне

1 Ответ

1 голос
/ 11 апреля 2019

В первом случае, ответ нулевой, потому что вы не использовали ни Promise, ни callback, чтобы сообщить песочнице Lambda, что работа выполнена.Во втором случае вы использовали обратный вызов, но вы передали результат в качестве первого аргумента.Лямбда-модель программирования для Node.js следует принципу «ошибка первого обратного вызова».Короче говоря, если какая-либо ошибка произошла во время выполнения, вы должны пойти с callback(error), и если все в порядке, и вам нужно вернуть какой-то результат из лямбды, вы должны пойти с callback(null, result).Так что в основном на вашей линии до console.log('done'); используйте callback(null, result), и это будет работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...