我在使用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);
}
}
);
}
});
};
我收到此回复:
但是,如果我更改代码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);
}
};
-我收到超时错误(确保它与未履行承诺有关):
问题
为什么async
版本不起作用?我该如何运作?
答案 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');
}