我已经在节点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个异步方法describeAlarmsForMetric
和listSubscriptionsByTopic
...但是我无法得到response
的值设置在异步方法的内部...
cwclient.describeAlarmsForMetric(function(par,data){
if(err){console.log(err);}
else{ response = data; }
});
它没有设置值...当我在设置值后尝试从外部异步方法访问`响应时,看不到任何存储在其中的值...
同样的事情在这里发生
if(subscribers.Subscriptions.length == 0)
订阅者值无法显示总是返回udefined ...
那么我该如何处理...我应该等待这些异步方法....我是Node js的新手,所以任何建议对我来说都是很棒的.....
基本上,如何在异步方法之外访问在异步方法内部分配了值的变量。还是有更好的方法来解决这个问题?