$ q.defer(),然后当时 [英] $q.defer() then of the then
问题描述
我不明白的返回值然后
,
下面的文档 -
然后(successCallback,errorCallback,notifyCallback) - 不管
当承诺是或将得到解决或拒绝,那么调用同一个
的成功或错误的回调异步只要结果
可用。回调被称为有一个参数:
导致或拒绝的理由。
块引用>因此,让我们试试吧,按照遵循小code节 -
VAR推迟= $ q.defer();
deferred.reject();
deferred.promise.then(函数(){
的console.log(第一个resolove);
},
功能(){
的console.log(第一个拒绝);
}
)。然后(函数(){
的console.log(第二解析);
},
功能(){
的console.log(第二个拒绝);
}
);1)为什么它记录 -
1日拒绝
第二决心而不是 -
1日拒绝
第二次拒绝
2)我有什么改变,使其日志 -
1日拒绝
第二次拒绝
\r\r\r\rVAR myAppModule = angular.module('对myApp',[])。\r
控制器('myCtrl',函数($范围,$ Q){\r
变种推迟= $ q.defer();\r
//deferred.resolve();\r
deferred.reject();\r
deferred.promise.then(函数(){\r
的console.log(第一个resolove);\r
},\r
功能(){\r
的console.log(第一个拒绝);\r
}\r
)。然后(函数(){\r
的console.log(第二解析);\r
},\r
功能(){\r
的console.log(第二个拒绝);\r
}\r
);\r
});\r
&LT;脚本SRC =https://ajax.googleapis.com/ajax /libs/angularjs/1.2.20/angular.min.js\"></script>\r
&LT; DIV NG-应用=对myApp&GT;\r
&LT; DIV NG控制器=myCtrl&GT;&LT; / DIV&GT;\r
&LT; / DIV&GT;\r
解决方案您错过了文档的下一行:
此方法的返回一个新的承诺的是解决或通过拒绝
在successCallback的返回值,errorCallback。
块引用>如果你想在未来链是出于什么原因了同样的承诺的结果,从处理程序内deferred.promise返回。
//这将始终触发拒绝回调
deferred.promise.then(函数(){
的console.log(第一个resolove);
返回deferred.promise;
},
功能(){
的console.log(第一个拒绝);
返回deferred.promise;
}
)如果您想返回要么成功/失败的回调,根据第一个结果,
返回$ q.when()
您的成功里面收益$ q.reject()
你的失败里面:deferred.promise.then(函数(){
的console.log(第一个resolove);
返回$ q.when();
},
功能(){
的console.log(第一个拒绝);
返回$ q.reject();
}
)。然后(函数(){
的console.log(第二解析);
},
功能(){
的console.log(第二个拒绝);
}
);I didn't understand the behavior of the return value of
then
,Here its documentation -
then(successCallback, errorCallback, notifyCallback) – regardless of when the promise was or will be resolved or rejected, then calls one of the success or error callbacks asynchronously as soon as the result is available. The callbacks are called with a single argument: the result or rejection reason.
So let's try it , according to the follow little code section -
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) Why does it log -
1st reject 2nd resolve
instead of -
1st reject 2nd reject
?
2) What do I have to change to make it log -
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>
解决方案You missed the next line of the docs:
This method returns a new promise which is resolved or rejected via the return value of the successCallback, errorCallback.
If you want the next chain to be the result of the same promise for whatever reason, return deferred.promise from inside your handler.
// 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; } )
If you want to return either the success/failed callback, depending on the result of the first,
return $q.when()
inside your success andreturn $q.reject()
inside your failure: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"); } );
这篇关于$ q.defer(),然后当时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!