所以我开始使用AngularJS,目前正在考虑承诺。所以我的旧代码看起来像这样:
app.controller('CustomerController', function ($scope Customers, $q) {
init();
function init() {
Customers.getCustomers()
.then(function (response) {
$scope.customers = response.data;
}, function (error) {
console.log(error);
});
}
});
app.factory('Customers', function ($http) {
return {
getCustomers: function () {
return $http.get('/api/customers');
}
};
});
所以我在init函数中做出的承诺是这样的:
function init() {
var deferred = $q.defer();
Customers.getCustomers()
.then(function (response) {
deferred.resolve(response.data); // how to pass this into my scope?
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
}
如您所见,我无法将其传递到我的范围。我在这里做错了吗?
答案 0 :(得分:0)
我不确定你在这里做什么。但是在控制器中使用这样的promises是没有意义的。你需要在其他地方调用你的init函数:
init().then(response => $scope.data = response);
在工厂的旧代码中,$ http服务的get方法返回一个promise,你正确处理控制器中的响应。
答案 1 :(得分:0)
考虑到Angular的$ http服务已经返回了一个promise。 $ http API基于$ q服务公开的延迟/承诺API。 所以你可以这样:
app.controller('CustomerController', function ($scope, Customers) {
init();
function init() {
Customers.getCustomers()
.then(function (data) {
$scope.customers = data;
}, function (error) {
console.log(error);
});
}
});
app.factory('Customers', function ($http) {
return {
getCustomers: function () {
var promise = $http.get('/api/customers').
then(function(response){
return response.data;
},
function(error) {
return response.error;
}
)
return promise;
}
};
});