如何使用Javascript检索Json中的键/值对象?

时间:2015-12-09 16:30:32

标签: javascript angularjs json web

我有一个奇怪的问题。

首先,我同时检索几个电话。并将返回的数据保存在名为" values"

的变量中
  function PrefsService($resource,PrefsResource,$q) {

    var initialize = function() {

      return $q
        .all(
          [PrefsResource.get({key:"TwentyFourHourTime"}),
          PrefsResource.get({key:"DecimalTime"}),
          PrefsResource.get({key:"startDayOfWeek"}),
          PrefsResource.get({key:"RoundingIncrement"}),
          PrefsResource.get({key:"RoundingOption"})
        ]
        )
        .then(function(values) {

          return values
        })

我在控制器中使用这段代码来查看返回的值:

PrefsService
.initialize()
.then(function(values) {
console.log("values",values);
console.log("values[0]",values[0]);
console.log("values[0].result",values[0].result);
})

我想使用"值[0]。结果"获取结果对象。但它总是给我一个值'#34; undefined"。

enter image description here

为什么?

THX

3 个答案:

答案 0 :(得分:0)

这种语法看起来很奇怪:

return {
    values
}

它基本上是一个具有属性名称的对象文字,但没有值。无论如何,您在初始all上标记的内容是不必要的:

.then(function(values) {

      return {
        values
      }
    })

删除该部分。

答案 1 :(得分:0)

返回的值是promises,使用它们作为你应该的承诺:

PrefsService
.initialize()
.then(function(values) {
    values.map(function(valuePromise) {
       valuePromise.then(function(value) {
           console.log(value);
       });
    });
 });

答案 2 :(得分:0)

最直接的方法是返回实际值,而不是承诺:

  function PrefsService($resource,PrefsResource,$q) {

    var initialize = function() {

      return $q
        .all([
          PrefsResource.get({key:"TwentyFourHourTime"}),
          PrefsResource.get({key:"DecimalTime"}),
          PrefsResource.get({key:"startDayOfWeek"}),
          PrefsResource.get({key:"RoundingIncrement"}),
          PrefsResource.get({key:"RoundingOption"})
        ])
        .then(function(values) {
          var returnValues = [];
          values.forEach(function(v) { 
              v.then(function(a) { 
                  returnValues.push(a); 
              })
          });
          return returnValues;
        })
    };

    return {
        initialize:initalize;
    }
}


PrefsService
   .initialize()
   .then(function(values) {
      console.log(values); //an array of the actual values, not the promises
   })