语义应如下:
promise.then(dfd.resolve,dfd.reject);
The $q documentation只提到处理被拒绝的承诺(此外,只有承诺以某种方式被拒绝):
defered.resolve(value) – resolves the derived promise with the value. If the value is a rejection constructed via $q.reject,the promise will be rejected instead.
这使得不清楚dfd.resolve(promise)是否有效/支持.此外,我不能使用$q.when(这确实需要时间)因为已经返回了deferred的承诺.
Angular版本是1.2.x.
deferred.resolve(值)
使用待处理的承诺调用解决方案会导致承诺等待传递的承诺,履行其履行价值或拒绝其拒绝原因(或者如果传递的承诺确实如此,则永久保持待定).
使用被拒绝的承诺调用resolve会导致承诺被传递的promise的拒绝原因拒绝.
用满足的承诺呼叫决心会导致承诺通过履行承诺的履行价值来实现.
使用非承诺值调用resolve会导致使用该值履行承诺.
From the 07000
要回答你问题的另一部分:
“”这使得不清楚dfd.resolve(promise)是否有效/支持.此外,我不能使用$q.when(这确实需要时间)因为已经返回了deferred的承诺.“”
deferred.promise创建的承诺可以提供给更多的收件人.每个收件人都可以在该承诺上调用.then方法.承诺只能解决一次(无论是值还是错误).但是容器可以被更多的消费者阅读.
将promise视为一个值的容器,将来可以通过.then,.catch和.finally方法获得.您可以多次访问容器,但其内容在结算时是不可变的.
$http服务中.success和.error方法的弃用
AngularJS团队在他们新发现的智慧中决定弃用.success和.error方法.那些方法都是错误的,我说好了解决.
有关.success和.error方法的弃用(或我应该说失败)的更多信息,请访问最新的AngularJS $http Service API Docs.
我们应该避免使用.success和.error方法,并从现在开始学习使用.then,.catch和.finally.
OP引用的$q服务参考日期已过时.有关最新版本,请访问AngularJS $q Service API Docs.
旧版AngularJS v1.2的更新
我做了一些spelunking in the AngularJS Github.遗留的$http服务创建了一个$q的承诺(L750),随后附加了错误的.success方法(L769)和错误的.error方法(L776).
这意味着人们坚持使用旧版本的AngularJS可以开始迁移到.then,.catch和.finally方法.
两个具有相同$http承诺的消费者的示例.
//Producer var httpPromise = $http.get(url); //Consumer #1 httpPromise.then (function (response) { vm1.data = response.data; }) .catch (function (err) { //check for error }); //Consumer #2 httpPromise.then (function (response) { vm2.data = response.data; }) .catch (function (err) { //check for error });
请注意,.then方法返回的数据与.success方法不同.
消费者也应检查错误.