如何从链式承诺中更新我的视图模型?

时间:2017-02-05 20:44:45

标签: javascript angularjs promise angular-promise

我对承诺很新。我很难尝试从2个链式承诺中更新我视图中使用的对象:

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在第二个承诺解决之前不会显示。当第一个承诺解决后,如何让我的对象直接可用于我的控制器?

1 个答案:

答案 0 :(得分:1)

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承诺。当您处理可能会或可能不是承诺的对象,或者承诺来自不可信任的来源时,这非常有用。

     

-- AngularJS $q Service API Reference - $q.when

相关问题