浏览JS对象

时间:2015-01-19 18:31:23

标签: javascript node.js amazon-sqs

我正在尝试浏览Javascript对象,但每次出现错误时:TypeError:无法读取未定义的属性“属性”

这是我的代码:

var attributes = [];
var params = {
  QueueUrl: 'AMAZON_QUEUE', /* required */
  AttributeNames: [
    'ApproximateNumberOfMessages',
    /* more items */
  ]
};
setInterval(queueAttributes, 2000) 

function queueAttributes () {
sqs.getQueueAttributes(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else  console.log (data);   
        attributes.push(data);           // successful response
        setTimeout(queueChecker, 1000);
});
}

function queueChecker (attributes) {
if (attributes.Attributes.ApproximateNumberOfMessages == 0) {
    console.log ('queueEmpty');
}
else
{
    console.log (attributes.Attributes.ApproximateNumberOfMessages + 'messages in queue');
};
}

任何人都知道如何调用属性变量中包含的ApproximateNumberOfMessages值?

我从SQS获得的响应以及属性变量的内容如下:

  { ResponseMetadata: { RequestId: '6c43d9d6-281d-5bfa-b7f5-94e165b49662' },
  Attributes: { ApproximateNumberOfMessages: '0' } }

感谢。

1 个答案:

答案 0 :(得分:0)

您正在以数组的形式访问属性。

attributes.push(data);

继续在数组属性中添加元素。如果您希望以

的方式访问属性
attributes.Attributes.ApproximateNumberOfMessages

您需要将属性声明为对象:

var attributes = {
   Attributes:{
      ApproximateNumberOfMessages:0
   }
}

然后在您的函数queueAttributes()中,您可以按如下方式填充属性对象...

function queueAttributes () {
   sqs.getQueueAttributes(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else  console.log (data);   

        //attributes.push(data);           // successful response
        attributes.Attributes.ApproximateNumberOfMessages = data;
        setTimeout(queueChecker, 1000);
  });
}

假设要在attributes.Attributes.ApproximateNumberOfMessages中填充数据。

希望它有所帮助!