首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >的$q.defer()

的$q.defer()
EN

Stack Overflow用户
提问于 2015-06-24 07:36:02
回答 1查看 3.2K关注 0票数 2

我不明白then返回值的行为,

它的文档 -

然后(successCallback、errorCallback、notifyCallback) --不管承诺是什么时候被解决或拒绝的,只要结果可用,就会异步调用其中一个成功或错误回调。回调由一个参数调用:结果或拒绝原因。

所以让我们试试,根据下面的小代码部分-

代码语言:javascript
运行
复制
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)为什么它记录-

代码语言:javascript
运行
复制
1st reject
2nd resolve

而不是-

代码语言:javascript
运行
复制
1st reject
2nd reject

2)我需要改变什么才能使它成为日志-

代码语言:javascript
运行
复制
1st reject
2nd reject

代码语言:javascript
运行
复制
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");
				}
			);
		});
代码语言:javascript
运行
复制
<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>	

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-24 07:49:41

您错过了文档的下一行:

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

如果您希望下一个链是相同承诺的结果,无论出于什么原因,请从处理程序中返回deferred.promise。

代码语言:javascript
运行
复制
// 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()

代码语言:javascript
运行
复制
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");
    }
);

示例

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31020497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档