为什么我的函数会超时而不是解决我的诺言并返回json对象?

时间:2019-09-26 18:57:13

标签: promise aws-lambda

我正在编写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()

内部的回调

1 个答案:

答案 0 :(得分:0)

我发现了问题。

我正在使用的pool.connection。尽管我使用connection.release(),但我仍然需要关闭池以使lambda完成。

 if (err) {
   console.log(err)
 }
 });

谢谢大家的评论和帮助。