angularjs – 是否有代理解析/拒绝对Angular $q延迟的承诺的快捷
鉴于一个未解决的延迟(dfd)和一个可能的承诺(承诺),可能会或可能不会延期,是否有办法将承诺“代理”到延期?
语义应如下: promise.then(dfd.resolve,dfd.reject); The $q documentation只提到处理被拒绝的承诺(此外,只有承诺以某种方式被拒绝):
这使得不清楚dfd.resolve(promise)是否有效/支持.此外,我不能使用$q.when(这确实需要时间)因为已经返回了deferred的承诺. Angular版本是1.2.x.
是的,deferred.resolve承诺.
deferred.resolve(值) 使用待处理的承诺调用解决方案会导致承诺等待传递的承诺,履行其履行价值或拒绝其拒绝原因(或者如果传递的承诺确实如此,则永久保持待定). 使用被拒绝的承诺调用resolve会导致承诺被传递的promise的拒绝原因拒绝. 用满足的承诺呼叫决心会导致承诺通过履行承诺的履行价值来实现. 使用非承诺值调用resolve会导致使用该值履行承诺.
要回答你问题的另一部分: “”这使得不清楚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方法不同. 消费者也应检查错误. 因此,即使是传统AngularJS的用户也可以开始编写.success和.error免费代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |