У меня есть следующий код кода, в котором вызов обновления выполняется каждый раз, когда пользователь обновляет данные в представлении.Второй вызов обещания выполняется перед возвращением обещаний - Угловой Javascript
// FACTORY SERVICE CODE
.factory('updateService', ['$http', '$q', function($http, $q){
var df = $q.defer();
var updateData = function(uriName, dataObj){
$http({
method: 'PUT',
data: dataObj,
url: uriName
}).then(function successCallback(response) {
console.log('from put');
console.log(response.data);
df.resolve(response.data);
}, function errorCallback(response) {
console.log('Error', response.data);
df.reject(response.data);
});
return df.promise;
}
return {updateData:updateData};
}])
// CONTROLLER CODE
.controller('MainCtrl', ['$scope','updateService', function($scope, updateService) {
$scope.saveToServer = function(){
var tmpObj = {data: $scope.dataOne, anotherData: $scope.dataTwo};
myService.updateData(uriName, tmpObj).then(function(resolved) {
console.log('CONTROLLER');
$scope.myData = resolved;
console.log($scope.myData);
console.log('end');
}, function(rejected){
console.log('put rejected');
});
});
$scope.btnUpdateClick = function(){
$scope.saveToServer();
};
}]);
ПРОБЛЕМА: Когда пользователь делает запрос на обновление в первый раз, код работает, как ожидалось. Но когда пользователь обновляется после этого, код «разрешенного обещания» (в контроллере) выполняется FIRST, а затем выполняется код $ http (в службе).
Пример вывода btnUpdateClick из ДВАЖДЫ с достаточным интервалом в промежутке между:
from put
Array [ Object, Object]
CONTROLLER
Array [ Object, Object]
end
CONTROLLER
Array [ Object, Object]
end
from put
Array [ Object, Object]
ВОПРОС: Просьба указать мне, где я делаю ошибку?
Является ли проблема из-за запроса PUT?
или можно исправить очередь выполнения, как ожидалось, через $ apply или что-то в этом роде?
'вар DF = $ д.defer(); 'переместите этот код внутри' updateData' функции , и еще одно предложение заключается в том, почему вы создаете отдельное обещание для вызова $ http. Просто верните обещание $ http. –
@pragaas было бы лучше принять ответ после продолжения :) –
@ARUN - правильно указал. – Mikki