Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从链接承诺更新视图模型?_Javascript_Angularjs_Promise_Angular Promise - Fatal编程技术网

Javascript 如何从链接承诺更新视图模型?

Javascript 如何从链接承诺更新视图模型?,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我对承诺很陌生。我很难从两个链接承诺中更新视图中使用的对象: function Test($resource, FC, UserDetailsService) { 'ngInject'; var self = this; self.data = { }; function getTestData() { firstPromise.then(function(response) { //I want self

我对承诺很陌生。我很难从两个链接承诺中更新视图中使用的对象:

function Test($resource, FC, UserDetailsService) {
    'ngInject';

    var self = this;

    self.data = {

    };

    function getTestData() {
        firstPromise.then(function(response) {

            //I want self.data to be displayed in my view
            angular.extend(self.data, response);
            //Now my view should display my object

            resource().get(user)
                .$promise.then(function(responsePts){
                    //And THEN update/refresh my view here
                    angular.extend(self.data, responsePts);

            });
        });
    };

    self.getTestData = getTestData;

};
编辑:
firstPromise
在其他服务中公开,并由其他服务使用:

$resource(apiUrl).get(user).$promise.then(function(bookData){
    angular.extend(self.bookings, bookData);
});
在我的控制器中:

function TestController(Test) {
    'ngInject';

    var $ctrl = this;

    $ctrl.testData = {};

    Test.getTestData();
    $ctrl.testData = Test.data;

};

相反,
self.data
将在第二次承诺解决之前不会显示。当解决第一个承诺时,我如何使我的对象可直接用于我的控制器?

如果
firstPromise
是$q服务承诺,则应更新视图。由于视图未更新,请使用$q.when()将未知承诺转换为$q服务承诺:

function getTestData() {
    //firstPromise.then(function(response) {
    $q.when(firstPromise).then(function(response) {

        //I want self.data to be displayed in my view
        angular.extend(self.data, response);
        //Now my view should display my object

        //return to chain
        return resource().get(user).$promise;
    }).then(function(responsePts){
        //And THEN update/refresh my view here
        angular.extend(self.data, responsePts);

    });
};
$q服务承诺与AngularJS框架及其摘要周期集成

$q.when(价值) 将可能是值或(第三方)的对象包装为$q承诺。当您处理的对象可能是承诺,也可能不是承诺,或者承诺来自不可信任的来源时,这非常有用


听起来像是
firstPromise
使用了非角度承诺api。显示更多代码更新了第一篇文章。您使用
extend
做得太多了,应该在
then()
中返回数据,以便在下一个
then()
中可以使用。您将希望
返回从所有函数创建的承诺(特别是
getTestData
和这两个
然后
回调)