Javascript angularjs链接承诺不起作用,angular.copy也不起作用
所以我的理解是,我可以循环我的第一个返回的对象集 Object=vm.liberty 环路 我对这个Javascript angularjs链接承诺不起作用,angular.copy也不起作用,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,所以我的理解是,我可以循环我的第一个返回的对象集 Object=vm.liberty 环路 我对这个obj的理解是,它是一个引用,因此vm.liberty对象将得到更新。。。。对吧? 我知道,console.log是不可靠的,因为它一碰到行就吐出结果 然而 console.log('obj', obj); 它包含我想要的数据,我在对象中的每个记录中添加了一个扩展嵌套对象 但有人不是我没有做正确的承诺链,就是别的什么 我甚至试着做一个角度的复制 vm.liberty2 = angula
obj
的理解是,它是一个引用,因此vm.liberty
对象将得到更新。。。。对吧?
我知道,console.log
是不可靠的,因为它一碰到行就吐出结果
然而
console.log('obj', obj);
它包含我想要的数据,我在对象中的每个记录中添加了一个扩展嵌套对象
但有人不是我没有做正确的承诺链,就是别的什么
我甚至试着做一个角度的复制
vm.liberty2 = angular.copy(vm.liberty);
这不起作用,如console.log(vm.liberty)代码>似乎为空
以下是我的功能:
var loadLiberty = function () {
var promise1 = libertyService.getLibertyQuestions();
promise1.then(function (response) {
vm.liberty = response;
}).then(function (res) {
vm.liberty.forEach(function (obj) {
promise2 = libertyService.getDirectives(obj.QuestionId)
.then(function (result) {
obj.directives = result;
console.log('obj', obj);
//vm.liberty.directives = result;
}, function (err) {
console.log('err', err);
});
});
});
//vm.liberty2 = angular.copy(vm.liberty);
console.log(vm.liberty);
vm.liberty2 = angular.copy(vm.liberty);
//return promise1;
};
想法或建议?您的控制台.log(vm.liberty)代码>发生在您的承诺得到解决之前,这就是为什么它仍然具有初始值的原因
请看以下示例:
函数loadLiberty(){
const libertyQuestionsPromise=libertyService.getLibertyQuestions();
自由问题
.然后(x=>vm.liberty=x)
.然后(()=>{
//保留在此数组中获取指令的承诺
常量承诺=[];
vm.liberty.forEach(obj=>{
//获取每个obj的指令
const promise=自由服务
.GetDirections(对象问题ID)
.然后(x=>obj.directives=x);
承诺。推动(承诺);
});
//等待承诺数组中的所有承诺得到解决
返回$q.all(承诺);
})
.然后(()=>{
//此时,应使用结果填充vm.liberty
console.log(vm.liberty);
})
.catch(错误=>{
//处理此链中任何承诺中可能发生的任何错误
});
}
不要忘记在您的服务/控制器中注入$q
依赖项。您的控制台.log(vm.liberty)代码>发生在您的承诺得到解决之前,这就是为什么它仍然具有初始值的原因
请看以下示例:
函数loadLiberty(){
const libertyQuestionsPromise=libertyService.getLibertyQuestions();
自由问题
.然后(x=>vm.liberty=x)
.然后(()=>{
//保留在此数组中获取指令的承诺
常量承诺=[];
vm.liberty.forEach(obj=>{
//获取每个obj的指令
const promise=自由服务
.GetDirections(对象问题ID)
.然后(x=>obj.directives=x);
承诺。推动(承诺);
});
//等待承诺数组中的所有承诺得到解决
返回$q.all(承诺);
})
.然后(()=>{
//此时,应使用结果填充vm.liberty
console.log(vm.liberty);
})
.catch(错误=>{
//处理此链中任何承诺中可能发生的任何错误
});
}
不要忘记在服务/控制器中注入$q
依赖项。您只能访问then
处理程序中的响应,在该处理程序运行之前,它将不可用。编写此项的更好方法是什么?您只能访问then
处理程序中的响应,在运行之前,它将不可用。写这篇文章的更好方法是什么?
var loadLiberty = function () {
var promise1 = libertyService.getLibertyQuestions();
promise1.then(function (response) {
vm.liberty = response;
}).then(function (res) {
vm.liberty.forEach(function (obj) {
promise2 = libertyService.getDirectives(obj.QuestionId)
.then(function (result) {
obj.directives = result;
console.log('obj', obj);
//vm.liberty.directives = result;
}, function (err) {
console.log('err', err);
});
});
});
//vm.liberty2 = angular.copy(vm.liberty);
console.log(vm.liberty);
vm.liberty2 = angular.copy(vm.liberty);
//return promise1;
};