2016-06-06 4 views
0

Я новичок в Угловом и Узлом, а также недавно играл с AWS. Мне нравится концепция серверных вычислений, поэтому я пытаюсь написать приложение AngularJS, которое будет вызывать микросервисы Node.JS, размещенные на AWS Lambda.Получение данных от Угловой фабрики, вызывающей AWS Лямбда в контроллер

У меня есть, что касается моей функции лямбда через Угловую фабрику и получения успешного ответа. Я могу получить полезную нагрузку Lambda, которую я определил в своей функции Lambda, на консоль изнутри Угловой фабрики после вызова метода lambda.invoke(), но я не могу получить данные в моем контроллере, чтобы фактически использовать его. Я просто получаю сообщение об ошибке «undefined».

Я читал об этом часами, на этом сайте и другими, и моя неопытность с Угловым делает это очень трудным для себя, поэтому любая помощь приветствуется. Я чувствую, что ответ должен быть некоторые вариации этого (angular controller is executing before factory complete) ....... но я просто не могу заставить его работать

Завод находится ниже:

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); // an error occurred 
    else { 
     console.log(data);   // successful response 
     if (data.Payload != '{}') { 
      jdata = JSON.parse(data.Payload); 
      return jdata; 
     } 

    } 
})}}; 
); 

Контроллер:

my.controller('AWSController', [ 
       '$scope', 
       'AWSbits', 

    function($scope, AWSbits){ 
     $scope.output = AWSbits.lambdaexecute(); 
     console.log($scope.output); ====> undefined 

     }  

]); 

ответ

0

у меня такая же проблема, как you.please найти свои решения

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); 
    } 
    } 

}); 

Контроллер

app.controller('abcController', function($scope,Lambda) { 
    var params = { 
       FunctionName: 'function-name-here', /* required */ 
       Payload:'{"userId": "1","email": "[email protected]"}' 

       }; 
    Lambda.LambdaAPI(params,function(err, data){ 
       if (err) console.log(err, err.stack); // an error occurred 
         console.log(data); 
    }) 
+1

Спасибо - просто понял, что это получил ответ - я использовал $ scope.apply(), чтобы исправить мою проблему. Я расскажу вам о том, что вы предложили, когда я получу шанс увидеть, как это работает. – user1439488

Смежные вопросы