Как получить объект ключ / значение в Json с помощью Javascript?

0

У меня странная проблема.

Сначала я получаю несколько вызовов одновременно. И сохраните возвращенные данные в переменной под названием "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);
})

Я хочу использовать "values [0].result" получить объект result. Но это всегда дает мне значение "undefined".

Изображение 174551

Зачем?

Спасибо

  • 2
    values [0] .result, попробуйте это
  • 1
    В какой момент вы пытаетесь использовать values[0].result ? Это может быть связано .
Показать ещё 8 комментариев
Теги:
web

3 ответа

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

Возвращаемые значения являются обещаниями, используют их как обещания, как вы должны:

PrefsService
.initialize()
.then(function(values) {
    values.map(function(valuePromise) {
       valuePromise.then(function(value) {
           console.log(value);
       });
    });
 });
  • 0
    Потому что вы оборачиваете values в объект. Просто верните values не {values} и вы получите массив, который будет иметь функцию map() .
  • 1
    Это потому, что вы делаете это return { values }; Что вы должны делать, это return values;
Показать ещё 1 комментарий
0

Этот синтаксис выглядит странно:

return {
    values
}

Его в основном объектный литерал с именем свойства, но без значения. В любом случае то, что вы мечение на начальное all ненужно:

.then(function(values) {

      return {
        values
      }
    })

Просто удалите эту часть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню