我有一个奇怪的问题。
首先,我同时检索几个电话。并将返回的数据保存在名为" 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"。
为什么?
THX
答案 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
})