Javascript angularjs链接承诺不起作用,angular.copy也不起作用

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

所以我的理解是,我可以循环我的第一个返回的对象集

Object=vm.liberty

环路

我对这个
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;
    };