$ q.defer()然后是当时的

时间:2015-06-24 07:36:03

标签: javascript angularjs angular-promise

我不了解then

的返回值的行为

这是documentation -

  

然后(successCallback,errorCallback,notifyCallback) - 无论如何   当承诺已经或将要解决或拒绝时,请拨打一个   成功或错误回调一旦结果异步   是可用的。使用单个参数调用回调:   结果或拒绝原因。

所以,请按照以下小代码部分进行尝试 -

var deferred = $q.defer();
deferred.reject();
deferred.promise.then(function () {
        console.log("1st resolove");
    },
    function () {
        console.log("1st reject");
    }
).then(function () {
    console.log("2nd resolve");
    },
    function () {
        console.log("2nd reject");
    }
);

1)为什么要记录 -

1st reject
2nd resolve

而不是 -

1st reject
2nd reject

2)我必须更改以使其记录 -

1st reject
2nd reject



var myAppModule = angular.module('myApp', []).
		controller('myCtrl',function($scope,$q){
			var deferred = $q.defer();
			//deferred.resolve();
			deferred.reject();
			deferred.promise.then(function () {
					console.log("1st resolove");
				},
				function () {
					console.log("1st reject");
				}
			).then(function () {
				console.log("2nd resolve");
				},
				function () {
					console.log("2nd reject");
				}
			);
		});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app="myApp">
		<div ng-controller="myCtrl"></div>
	</div>	
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:7)

你错过了下一行文档:

  

此方法返回一个新的承诺,通过该协议解析或拒绝   successCallback的返回值,errorCallback。

如果您希望下一个链因任何原因而成为同一个承诺的结果,请从您的处理程序中返回deferred.promise。

req

如果你想要返回成功/失败的回调,取决于你成功的第一个// This will always trigger the reject callback deferred.promise.then(function () { console.log("1st resolove"); return deferred.promise; }, function () { console.log("1st reject"); return deferred.promise; } ) 和失败中的return $q.when()的结果:

return $q.reject()

Example