我依次发送两个查询 查询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),则会发生错误。 我认为解决这个问题可能太简单了 如果您知道这一点,请帮助我
答案 0 :(得分:1)
在第一种情况下,response为空,因为您既没有使用Promise,也没有使用回调来让Lambda沙盒知道该工作已完成。在第二种情况下,您使用了回调,但是将结果作为第一个参数传递给了它。 Node.js的Lambda编程模型遵循称为“错误优先回调”的原则。长话短说,如果执行期间发生任何错误,则应使用callback(error)
,如果一切正常,并且需要从lambda返回一些结果,则应使用callback(null, result)
。因此,基本上在您console.log('done');
使用callback(null, result)
之前,您就可以使用它了,