繁体   English   中英

Node.js 8.10中具有异步瀑布的AWS Lambda查询

[英]AWS Lambda query with async waterfall in node.js 8.10

我依次发送两个查询,从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()记录数据,它在命令行中获取数据。 但是在lambda中,将函数放入exports.handler中,它的响应为空。 如果将“返回结果”更改为callback(result),则会发生错误。 我认为解决这个问题可能太简单了。如果您知道这一点,请帮助我

在第一种情况下,response为空,因为您既没有使用Promise,也没有使用回调来让Lambda沙盒知道该工作已完成。 在第二种情况下,您使用了回调,但是将结果作为第一个参数传递给了它。 Node.js的Lambda编程模型遵循称为“错误优先回调”的原则。 长话短说,如果执行期间发生任何错误,则应使用callback(error) ,如果一切正常,并且需要从lambda返回一些结果,则应使用callback(null, result) 所以基本上就在console.log('done'); 使用callback(null, result) ,它将为您工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM