javascript - Getting data from Angular factory invoking AWS Lambda into controller -


i'm new angular , node , have been playing aws recently. concept of serverless computing attempting write angularjs app invoke node.js microservices hosted on aws lambda.

i've got far invoking lambda function through angular factory , getting successful response. can output lambda payload i've defined in lambda function console within angular factory after calling lambda.invoke() method, can't data controller use it. "undefined" error.

i've been reading around hours, on site , others , inexperience angular making hard work through myself, appreciated. feel answer must variation on (angular controller executing before factory complete) .......but can't working

the factory below:

my.factory("awsbits", function() {    var params = { functionname: 'arn:aws:lambda:eu-west-1:xyz', invocationtype: 'requestresponse', logtype: 'tail', payload: json.stringify ( {   ".....some stuff" }),  };  var lambda = new aws.lambda();  return{    lambdaexecute : function(){    lambda.invoke(params, function(err, data) {       if (err) console.log(err, err.stack); // error occurred     else {       console.log(data);           // successful response       if (data.payload != '{}') {           jdata = json.parse(data.payload);            return jdata;       }    }  })}}; ); 

the controller is:

my.controller('awscontroller', [               '$scope',               'awsbits',       function($scope, awsbits){          $scope.output = awsbits.lambdaexecute();          console.log($scope.output);  ====> undefined        }      ]); 

i have same issue you.please find solutions

service.js

app.service('lambda', function() {    aws.config.update({accesskeyid: 'accesskeyid here', secretaccesskey: 'secretaccesskey here'});   aws.config.region = 'us-west-1';    aws.config.apiversions = {     lambda: '2015-03-31',     // other service api versions   };    var lambda = new aws.lambda();    return {       lambdaapi: function (params,callback) {        return lambda.invoke(params,callback);     }   }  }); 

controller

app.controller('abccontroller', function($scope,lambda) {     var params = {                 functionname: 'function-name-here', /* required */                 payload:'{"userid": "1","email": "abc@gmail.com"}'                  };     lambda.lambdaapi(params,function(err, data){                 if (err) console.log(err, err.stack); // error occurred                       console.log(data);     })