<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>
Warum, wenn mein $scope.flag falsch ist, ist das erste dann ein Fehler und das zweite dann ein Erfolg. Wenn ich es ändern möchte, wie kann ich es ändern?
每个.then都会返回一个新的promise。新的promise执行失败的代码后,会resolve当前传入.then的函数的返回值。因此第二个执行的是success。
这问题说多了也没用,自己看promise源码,一下就清楚了。