Мне трудно понять идею промисов (в angularjs).
Я подумал, что могу определить функцию, которая возвращает обещание. Потребитель этого обещания может работать с ним и также может возвращать некоторые данные или обещание.
Но этот простой пример ведет себя неожиданно: первый вызов .then()
возвращает отказ, а второй вызов then()
выполняет функцию успеха.
angular.module('myexample', []).controller('Ctrl', ['$scope', '$q',
function($scope, $q) {
$scope.sdfsdf = "";
$scope.action = function() {
$('#msg').html("");
$.Deferred().resolve()
.then(function(response) {
$('#msg').html("error during processing of data!");
return $q.reject('my-failure-reason');
})
.then(
function(data) {
$('#msg').html($('#msg').html() + "<br>success: " + data);
},
function(data) {
$('#msg').html($('#msg').html() + "<br>failure: " + data);
}
);
};
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body ng-app="myexample">
<div ng-controller="Ctrl">
<button ng-click="action()">Go!</button>
<div id="msg"></div>
</div>
</body>
Я просмотрел похожие вопросы, но не могу найти разницу между моим подходом и подходом в принятых ответах (например, this один)