通过 angularjs $resource 获取数据
Get data by angularjs $resource
我有以下通过 $resource 获取数据的 angularJS 函数,它可以工作并将这些数据推送到 vm.data 数组,但是当我尝试在控制器中获取 vm.data我得到空值,下面代码的最后一行打印空值
function loadAll() {
Questiongroup.query({}).$promise.then(function(group){
console.log(group);
for(var i=0;i<group.length;i++){
var grouptitle=group[i].title
Question.questionsByQuestionGroup({id:group[i].id}).$promise.then(function(question){
vm.question = question;
for(var j=0;j<question.length;j++){
vm.data.push({ group: grouptitle, question: question[j].question , questiontype: question[j].type });
console.log(vm.data) //this line print correct data
}
});
}
});
}
loadAll();
console.log(vm.data); //This line print null
last console.log
打印 null
的原因是它在 赋予 .then
方法的功能之前执行 。作为 .then
方法参数的函数由 $q
服务 在 来自服务器的数据 return 之后调用。
loadAll
函数应该 return 派生的承诺,可用于检索 vm.data
after正在组装中。这涉及 链接 承诺和使用 $q.all
方法。
function loadAll() {
var topPromise = Questiongroup.query({}).$promise;
var derivedPromise = topPromise.then(function(group){
var promiseList = [];
console.log(group);
for(var i=0;i<group.length;i++){
var itemPromise = getItemPromise(group[i]);
promiseList.push(itemPromise);
};
//return $q.all promise for chaining
return $q.all(promiseList);
});
//return promise
return derivedPromise;
};
然后使用 returned 承诺。
var loadAllPromise = loadAll();
loadAllPromise.then(function (vmData) {
console.log(vmData);
});
上面的示例显示了如何创建一个承诺,该承诺 return 是一个承诺数组中的一个数据数组。将其扩展到多级迭代在直觉上是显而易见的。
AngularJS $q.all
也适用于散列。
function loadAll() {
var topPromise = Questiongroup.query({}).$promise;
var derivedPromise = topPromise.then(function(group){
var promiseHash = {};
console.log(group);
for(var i=0;i<group.length;i++){
var itemPromise = getItemPromise(group[i]);
promiseHash[group[i].id] = itemPromise;
};
//return $q.all promise for chaining
return $q.all(promiseHash);
});
//return promise
return derivedPromise;
};
上面的例子return是一个包含数据散列(关联数组)的承诺。
loadAllPromise.then(function (dataHash) {
console.log(dataHash);
});
来自文档:
all(promises);
Combines multiple promises into a single promise that is resolved when all of the input promises are resolved.
Parameters
An array or hash of promises.
Returns
Returns a single promise that will be resolved with an array/hash of values, each value corresponding to the promise at the same index/key in the promises array/hash. If any of the promises is resolved with a rejection, this resulting promise will be rejected with the same rejection value.
我有以下通过 $resource 获取数据的 angularJS 函数,它可以工作并将这些数据推送到 vm.data 数组,但是当我尝试在控制器中获取 vm.data我得到空值,下面代码的最后一行打印空值
function loadAll() {
Questiongroup.query({}).$promise.then(function(group){
console.log(group);
for(var i=0;i<group.length;i++){
var grouptitle=group[i].title
Question.questionsByQuestionGroup({id:group[i].id}).$promise.then(function(question){
vm.question = question;
for(var j=0;j<question.length;j++){
vm.data.push({ group: grouptitle, question: question[j].question , questiontype: question[j].type });
console.log(vm.data) //this line print correct data
}
});
}
});
}
loadAll();
console.log(vm.data); //This line print null
last console.log
打印 null
的原因是它在 赋予 .then
方法的功能之前执行 。作为 .then
方法参数的函数由 $q
服务 在 来自服务器的数据 return 之后调用。
loadAll
函数应该 return 派生的承诺,可用于检索 vm.data
after正在组装中。这涉及 链接 承诺和使用 $q.all
方法。
function loadAll() {
var topPromise = Questiongroup.query({}).$promise;
var derivedPromise = topPromise.then(function(group){
var promiseList = [];
console.log(group);
for(var i=0;i<group.length;i++){
var itemPromise = getItemPromise(group[i]);
promiseList.push(itemPromise);
};
//return $q.all promise for chaining
return $q.all(promiseList);
});
//return promise
return derivedPromise;
};
然后使用 returned 承诺。
var loadAllPromise = loadAll();
loadAllPromise.then(function (vmData) {
console.log(vmData);
});
上面的示例显示了如何创建一个承诺,该承诺 return 是一个承诺数组中的一个数据数组。将其扩展到多级迭代在直觉上是显而易见的。
AngularJS $q.all
也适用于散列。
function loadAll() {
var topPromise = Questiongroup.query({}).$promise;
var derivedPromise = topPromise.then(function(group){
var promiseHash = {};
console.log(group);
for(var i=0;i<group.length;i++){
var itemPromise = getItemPromise(group[i]);
promiseHash[group[i].id] = itemPromise;
};
//return $q.all promise for chaining
return $q.all(promiseHash);
});
//return promise
return derivedPromise;
};
上面的例子return是一个包含数据散列(关联数组)的承诺。
loadAllPromise.then(function (dataHash) {
console.log(dataHash);
});
来自文档:
all(promises);
Combines multiple promises into a single promise that is resolved when all of the input promises are resolved.
Parameters
An array or hash of promises.
Returns
Returns a single promise that will be resolved with an array/hash of values, each value corresponding to the promise at the same index/key in the promises array/hash. If any of the promises is resolved with a rejection, this resulting promise will be rejected with the same rejection value.