我对承诺很新。我很难尝试从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
在第二个承诺解决之前不会显示。当第一个承诺解决后,如何让我的对象直接可用于我的控制器?
答案 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承诺。当您处理可能会或可能不是承诺的对象,或者承诺来自不可信任的来源时,这非常有用。