Помощь в обратном вызове для получения строки сообщения из данных AWS с использованием узла - PullRequest
0 голосов
/ 23 мая 2018

Я использую Node.Js с aws-sdk для заполнения var message.1) Сначала я вызываю функцию для получения групп AWS, которую затем присоединяю к сообщению.2) Во-вторых, я вызываю другую функцию, основанную на данных из первой функции, которые я затем присоединяю к сообщению.Последнее, что я отправил письмо и использовал строку сообщения. Вопрос : Как я могу объединить строку message и передать ее в функцию SendEmail?

Вот мой код.

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-1'});
var iam = new aws.IAM({apiVersion: '2010-05-08'});

exports.handler = function (event, context) {
    console.log("Incoming: ", event);
    var message = "";

    function AwsListGroupsFunction(err, data) 
    {
        if (err) console.log(err, err.stack); // an error occurred
        else
        {
            //Get AWS Groups from AWS Account
            var dataCount = data.Groups.length-1;
            for (var key in data.Groups) 
            {
                message+= data.Groups[key].GroupName
                // Then get all users associated to the GroupName
                var groupParams = { GroupName: data.Groups[key].GroupName};
                iam.getGroup(groupParams, AwsGetGroupFunction); // end of else for if iam.getGroup

                if (key != dataCount)
                    message += ', ';
            }
        }
        return message;
    };

    function AwsGetGroupFunction(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else{
            // successful response
            message+= "<br/>";
            for (var userKey in data.Users) {
                message += data.Users[userKey].UserName + ' and PasswordLastUsed: ' + data.Users[userKey].PasswordLastUsed + ' , ';
            }                      

        }
        return message;
    };

    function SendEmail(message){
   console.log('===SENDING EMAIL HERE using message variable===');

    }


    // This is the only function called which calls other functions
    var params = {};  
    iam.listGroups(params, AwsListGroupsFunction);

};

1 Ответ

0 голосов
/ 24 мая 2018

Функция AwsListGroupsFunction (err, data) используется в качестве обратного вызова для iam.listGroups.Таким образом, вы не можете вернуть значение из функции AwsListGroupsFunction в этом контексте.Это относится и к другим функциям обратного вызова.

Вы можете решить эту проблему многими способами, поэтому лучшим выбором будут методы асинхронной библиотеки, такие как mapSeries. Это псевдокод для простого решения.Вы можете улучшить его с помощью дальнейшего рефакторинга.

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-1'});
var iam = new aws.IAM({apiVersion: '2010-05-08'});
var async = require('async');

exports.handler = function (event, context) {
    console.log("Incoming: ", event);
    var message = "";

    function AwsListGroupsFunction(err, data) 
    {
        if (err) console.log(err, err.stack); // an error occurred
        else
        {
            //Get AWS Groups from AWS Account
            var dataCount = data.Groups.length-1;
            async.mapSeries(data.Groups, function(group, cb) {
              var partialMessage = group.GroupName;
              // Then get all users associated to the GroupName
              var groupParams = { GroupName: group.GroupName};
              iam.getGroup(groupParams, function(err, data) {
                if (err) {
                  console.log(err, err.stack); // an error occurred
                  cb(err, "");
                } 
                else{
                    // successful response
                    partialMessage+= "<br/>";
                    for (var userKey in data.Users) {
                      partialMessage += data.Users[userKey].UserName + ' and PasswordLastUsed: ' + data.Users[userKey].PasswordLastUsed + ' , ';
                    }                      
                    cb(null, partialMessage);
                }
              });
            }, function(err, result) {
                if (err) {
                  //handle error. Expected message is not ready
                }
                else {
                  /*
                    Here result contains array of partial messages; ie [partial message for group1, partial message for group2, ...]
                    concatinate partial messages and send email.
                  */

                }
            });
        }

    };

    function SendEmail(message){
   console.log('===SENDING EMAIL HERE using message variable===');

    }

    // This is the only function called which calls other functions
    var params = {};  
    iam.listGroups(params, AwsListGroupsFunction);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...