节点Js,AWS Lambda如何获取嵌套的异步方法变量

时间:2018-07-28 11:34:24

标签: javascript node.js aws-lambda

我已经在节点js 8.10中编写了该lambda函数。异步1方法

不能正确分配该值
                var response; 
                var client = new AWS.CloudWatchLogs();
                var  params = {logGroupName: group};
                client.describeMetricFilters(params, function(err, data) {
                   if(err) { console.log(err);}
                   else{
                   for(let p of data.metricFilters){
                      var  patterns = [/\$\.errorCode\s*=\s*\"?\*UnauthorizedOperation(\"|\)|\s)/i, /\$\.errorCode\s*=\s*\"?AccessDenied\*(\"|\)|\s)/i];
                       if(findinString(patterns, p.filterPattern)){
                           var cwclient = new AWS.CloudWatch();
                           var response;
                           var par = {MetricName: p.metricTransformations[0].metricName, Namespace: p.metricTransformations[0].metricNamespace };
                           cwclient.describeAlarmsForMetric(function(par,data){
                               if(err){console.log(err);}
                               else{ response = data; }
                           });
                           var snsClient = new  AWS.SNS();
                           var subscribers;
                           var yh = { TopicArn:  response.MetricAlarms[0].AlarmActions[0] };
                           snsClient.listSubscriptionsByTopic(yh, function(err, data){
                              if(err){console.log(err);}
                              else {subscribers = data;}  
                           });
                           if(subscribers.Subscriptions.length == 0){
                               result = true;
                           }

现在上面的第一个异步方法describeMetricFilters中有2个异步方法describeAlarmsForMetriclistSubscriptionsByTopic ...但是我无法得到response的值设置在异步方法的内部...

cwclient.describeAlarmsForMetric(function(par,data){
                               if(err){console.log(err);}
                               else{ response = data; }
                           });

它没有设置值...当我在设置值后尝试从外部异步方法访问`响应时,看不到任何存储在其中的值...

同样的事情在这里发生

if(subscribers.Subscriptions.length == 0)订阅者值无法显示总是返回udefined ...

那么我该如何处理...我应该等待这些异步方法....我是Node js的新手,所以任何建议对我来说都是很棒的.....

基本上,如何在异步方法之外访问在异步方法内部分配了值的变量。还是有更好的方法来解决这个问题?

0 个答案:

没有答案