我不明白then
返回值的行为,
它的文档 -
然后(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>
发布于 2015-06-24 07:49:41
您错过了文档的下一行:
此方法返回通过successCallback,errorCallback的返回值解析或拒绝的新承诺。
如果您希望下一个链是相同承诺的结果,无论出于什么原因,请从处理程序中返回deferred.promise。
// 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()
:
deferred.promise.then(function () {
console.log("1st resolove");
return $q.when();
},
function () {
console.log("1st reject");
return $q.reject();
}
).then(function () {
console.log("2nd resolve");
},
function () {
console.log("2nd reject");
}
);
示例
https://stackoverflow.com/questions/31020497
复制相似问题