Почему моя функция перестает работать, вместо того, чтобы выполнять свои обещания и возвращать объект json? - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу лямбда-функцию aws, чтобы получить данные из 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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...