У меня есть угловое приложение, но иногда мои обратные вызовы, похоже, выполняются до их использования. Я определил сервис для своих вызовов api, его методы выглядят так.Угловой обратный вызов после вызова API
function addOffer(id) {
var request = $http({
method: "get",
url: "/api/campaign/offers",
params: {
action: "add",
id: id
}
});
return (request.then(handleSuccess, handleError));
}
function handleError(response) {
// The API response from the server should be returned in a
// nomralized format. However, if the request was not handled by the
// server (or what not handles properly - ex. server error), then we
// may have to normalize it on our end, as best we can.
if (
!angular.isObject(response.data) || !response.data.message
) {
return ($q.reject("An unknown error occurred."));
}
// Otherwise, use expected error message.
return ($q.reject(response.data.message));
}
function handleSuccess(response) {
return (response.data);
}
А потом в мой контроллер у меня есть область применения функции, определенные как этот
$scope.addOffer = function(){
campaignService.addOffer($scope.id).then(
loadRemoteData()
);
};
Удаленная функция загрузки данных синхронизирует клиент с тем, что хранится в интерфейсе приложения.
Моя проблема заключается в том, что в методе addOffer контроллера функция loadRemoteData() запускается перед добавлением предложения, так что она загружает данные без нового предложения. Но затем при вынужденном обновлении это предложение есть. Есть ли что-то, что нужно сделать по-другому, чтобы это работало так, как ожидалось?
После хорошего количества исследований в '$ q' и' $ http' реализация обещания, я упал на моих основах JavaScript и ответил на ваш вопрос. Это снова повторяет, почему основы должны быть очень сильными. –