angular.js中promise多个then的问题

浏览:32日期:2022-12-19

问题描述

<p ng-app='MyApp'> <p ng-controller='MyController'> <label for='flag'>成功 <input 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>

为什么当我$scope.flag为false的时候第一个then走是error而第二个走的是success,要改的话改怎么改

问题解答

回答1:

promise.then(function (result) { result = result + 'you have passed the first then()'; $scope.status = result; // return result; return $q.resolve(result); }, function (error) { error = error + 'failed but you have passed the first then()'; $scope.status = error; // return error; return $q.reject(error); }).then(function (result) { alert('Success: ' + result); }, function (error) { alert('Fail: ' + error); })回答2:

每个.then都会返回一个新的promise。新的promise执行失败的代码后,会resolve当前传入.then的函数的返回值。因此第二个执行的是success。

这问题说多了也没用,自己看promise源码,一下就清楚了。

相关文章: