我正在编写aws lambda函数,以从3个来源获取数据并以json格式返回。我正在尝试使用诺言来完成它。但是,即使三个过程正确运行,我的函数也总是超时,它似乎没有返回结果。
我一直在尝试重新整理承诺,并删除了一对夫妇以查看它们是否失败。
这是特别的诺言
.then(function(clientinfo) {
return new Promise((resolve, reject) => { // (*)
pool.getConnection(function(err, connection) {
if (err) {
console.log(err);
}
connection.query('SELECT * FROM mautic.leads where email = "test@test.com"', function (error, results, fields) {
connection.release();
// Handle error after the release.
if (error) throw error;
else
console.log(results);
console.log('send results');
clientinfo.mydata = results;
callback(clientinfo);
});
});
});
})
function get_user(event, callback) {
console.log('START');
new Promise( function (resolve, reject) {
dynamo.query({
TableName : 'TransactionFingerprint',
KeyConditionExpression : "emailmtcid = :emailmtcid",
ExpressionAttributeValues : {
":emailmtcid": event.queryStringParameters.id
},
Limit : 1
}, function(err, data) {
if (err) {
console.log('error','reading dynamodb failed: '+err);
reject(err);
}
if (data.Count == '0') {
console.log('NOT FOUND');
update_user(url, sid, function(json){ callback(json) });
} else {
console.log('FOUND IN DYNAMO');
const dyntable = {
"TableName": "TransactionFingerprint",
"Item": {
"Id": data.Items[0].emailmtcid
}
};
console.log("dynamodb");
console.log(dyntable);
resolve(dyntable) ;
}
});
})
.then(function(dyntable) {
return new Promise((resolve, reject) => { // (*)
conn.login(salesforceLogin, salesforcePass, function(err, res) {
if (err) {
console.log(err);
}
conn.query("SELECT FirstName,LastName,PersonEmail,silverpop__Silverpop_RecipientID__pc from Account WHERE PersonEmail = 'test@test.com'",
function(err, res) {
if (err) {
console.log(res + 'SF2 RESPONSE');
}
var sfinfo = res['records'];
var clientinfo = {};
clientinfo.data = sfinfo;
console.log('salesforce query');
console.log(sfinfo);
clientinfo.dyndata = dyntable;
resolve(clientinfo);
});
});
});
})
.then(function(clientinfo) {
// return new Promise((resolve, reject) => { // (*)
pool.getConnection(function(err, connection) {
if (err) {
console.log(err);
}
connection.query('SELECT * FROM mautic.leads where email = "test@test.com"', function (error, results, fields) {
connection.release();
// Handle error after the release.
if (error) throw error;
else
console.log(results);
console.log('send results');
clientinfo.mydata = results;
callback(clientinfo);
});
});
// });
});
}
get_user(event, response => done(null, response));
希望我会在一个json对象中返回来自所有三个数据源的所有结果。 **编辑,我删除了.then()
内部的回调答案 0 :(得分:0)
我发现了问题。
我正在使用的pool.connection。尽管我使用connection.release(),但我仍然需要关闭池以使lambda完成。
if (err) {
console.log(err)
}
});
谢谢大家的评论和帮助。