Я давно застрял на этом и не могу понять, почему значение не возвращается. Я использую $resource
Angular $resource
чтобы сделать запрос GET API.
Моя фабрика ресурсов $ выглядит так:
.factory("Bookings", function ($resource) {
return $resource("www.example/bookings_on_date/:day", {});
})
Я попытался выполнить обещания, но не могу сделать это правильно.
function getBookings(day){
return Bookings.get({"day": day}).$promise.then(function(data) {
console.log(data.total)
return data.total;
});
}
$scope.todaysBookings = getBookings(TODAY);
$scope.tomorrowsBookings = getBookings(TOMORROW);
Когда я просматриваю либо console.log($scope.todaysBookings)
либо $scope.tomorrowBookings
в консоли, он возвращает undefined.
Я также попробовал все, начиная с этого jsfiddle, но, к сожалению, не повезло.
Я думаю, это должно быть так:
function getBookings(day) {
return Bookings.get({"day": day}).$promise.then(function(data) {
return data.total;
});
}
getBookings(TODAY).then(function(total) {
$scope.todaysBookings = total;
});
getBookings(TOMORROW).then(function(total) {
$scope.tomorrowsBookings = total;
});
Обновление: я думаю, что следующий стиль кода может помочь вам предотвратить следующие проблемы с расширенным методом:
function getBookings(args) {
return Bookings.get(args).$promise;
}
getBookings({"day": TODAY}).then(function(data) {
$scope.todaysBookings = data.total;
});
getBookings({"day": TOMORROW}).then(function(data) {
$scope.tomorrowsBookings = data.total;
});
Здесь немного преимуществ:
ps В противном случае вы могли бы удалить объявление функции и код, как это (чтобы сделать его максимально простым):
Bookings.get({"day": TODAY}).$promise.then(function(data) {
$scope.todaysBookings = data.total;
});
Bookings.get({"day": TOMORROW}).$promise.then(function(data) {
$scope.tomorrowsBookings = data.total;
});