У меня странная проблема.
Сначала я получаю несколько вызовов одновременно. И сохраните возвращенные данные в переменной под названием "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".
Зачем?
Спасибо
Самым простым способом было бы вернуть фактические значения, а не обещания:
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
})
Возвращаемые значения являются обещаниями, используют их как обещания, как вы должны:
PrefsService
.initialize()
.then(function(values) {
values.map(function(valuePromise) {
valuePromise.then(function(value) {
console.log(value);
});
});
});
values
в объект. Просто верните values
не {values}
и вы получите массив, который будет иметь функцию map()
.
return { values };
Что вы должны делать, это return values;
Этот синтаксис выглядит странно:
return {
values
}
Его в основном объектный литерал с именем свойства, но без значения. В любом случае то, что вы мечение на начальное all
ненужно:
.then(function(values) {
return {
values
}
})
Просто удалите эту часть.
values[0].result
? Это может быть связано .