<p ng-app="MyApp">
<p ng-controller="MyController">
<label for="flag">成功
<input id="flag" type="checkbox" ng-model="flag" /><br/>
</label>
<p ng-cloak>
{{status}}
</p>
<hr/>
<button ng-click="handle()">点击我</button>
</p>
</p>
<script>
angular.module("MyApp", [])
.controller("MyController", ["$scope", "$q", function ($scope, $q) {
$scope.flag = true;
$scope.handle = function () {
var deferred = $q.defer();
var promise = deferred.promise;
if ($scope.flag) {
deferred.resolve("you are lucky!");
} else {
deferred.reject("sorry, it lost!");
}
promise.then(function (result) {
result = result + "you have passed the first then()";
$scope.status = result;
return result;
}, function (error) {
error = error + "failed but you have passed the first then()";
$scope.status = error;
return error;
}).then(function (result) {
alert("Success: " + result);
}, function (error) {
alert("Fail: " + error);
})
}
}]);
</script>
Pourquoi quand mon $scope.flag est faux, le premier est alors une erreur et le second est alors un succès. Si je veux le changer, comment le changer
.
Chacun renvoie ensuite une nouvelle promesse. Une fois que la nouvelle promesse aura exécuté le code ayant échoué, elle résoudra la valeur de retour de la fonction actuellement transmise dans .then. Donc le deuxième exécuté est le succès.
Il est inutile de trop parler de ce problème. Il suffit de regarder le code source de la promesse et vous le comprendrez tout de suite.