Angularjs 是否有代理解决/拒绝对延迟的$q的承诺的快捷方式?
给定一个未解决的延期(Angularjs 是否有代理解决/拒绝对延迟的$q的承诺的快捷方式?,angularjs,angular-promise,Angularjs,Angular Promise,给定一个未解决的延期(dfd),以及一个可能延期或可能不延期的可执行承诺(承诺),有没有办法将承诺“代理”到延期中 语义应该是这样的: promise.then(dfd.resolve, dfd.reject); 仅提及被拒绝承诺的处理(此外,仅提及以某种方式被拒绝的承诺): defered.resolve(value)–使用值解析派生承诺。如果该值是通过$q.reject构造的拒绝,则承诺将被拒绝 这就不清楚dfd.resolve(promise)是否有效/受支持。此外,我不能使用$q.wh
dfd
),以及一个可能延期或可能不延期的可执行承诺(承诺),有没有办法将承诺“代理”到延期中
语义应该是这样的:
promise.then(dfd.resolve, dfd.reject);
仅提及被拒绝承诺的处理(此外,仅提及以某种方式被拒绝的承诺):
defered.resolve(value)–使用值解析派生承诺。如果该值是通过$q.reject构造的拒绝,则承诺将被拒绝
这就不清楚dfd.resolve(promise)
是否有效/受支持。此外,我不能使用$q.when
(需要一个可选项),因为延迟的承诺已经返回
角度版本为1.2.x.是
每当您将一个承诺解析为另一个承诺时(无论是通过resolve()
还是通过回调返回),它都会隐式地等待另一个承诺
事实上,要使一个承诺实际解析到另一个承诺实例(不等待)是不可能的。是的,延迟。解析
接受一个承诺
延迟。解析(值)
使用未决承诺调用resolve会导致承诺等待已通过的承诺,以其履行价值履行承诺,或以其拒绝原因拒绝承诺(或者如果已通过的承诺确实如此,则永远保持未决)
使用拒绝的承诺调用resolve会导致使用已通过承诺的拒绝原因拒绝承诺
使用已履行的承诺调用resolve会导致使用已传递的承诺的履行值来履行承诺
使用非承诺值调用resolve会导致使用该值实现承诺
从
回答问题的另一部分:
“”这就不清楚dfd.resolve(promise)是否有效/受支持。此外,我不能使用$q.when(需要一个可执行的参数),因为延迟的承诺已经返回。“”
由创建的承诺延期。承诺可以给予多个收件人。每个收件人都可以调用。然后根据该承诺调用方法。承诺只能解析一次(值或错误)。但是容器可以被多个消费者读取
将承诺视为一个容器,它包含了一个值,您可以通过在未来获得该值。然后是、、
和。最后是方法。您可以多次访问该容器,但其内容在解析时是不变的
弃用$http
服务中的.success
和.error
方法
AngularJS团队以他们新发现的智慧决定反对.success
和.error
方法。那些方法都是错误的,我说很好地摆脱了
有关.success
和.error
方法的弃用(或者我应该说失败)的更多信息,请访问最新版本
我们应该避免.success
和.error
方法,并从现在开始学习使用
OP引用的$q
服务参考已注明日期。有关最新版本,请访问
旧版AngularJS v1.2的更新
我做了一些。传统的$http
服务创建一个$q
承诺,并随后附加buggy.success
方法和buggy.error
方法
这意味着,坚持使用AngularJS旧版本的用户可以开始迁移到。然后
、。catch
、以及。最后
方法
一个示例,两个消费者使用相同的$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
免费代码。请记住$q
(来自Angular)和q
(由mage Kris Kowal撰写)虽然名称相似,但不同,而魔鬼则在具体的承诺实现细节中。AngularJS从Kris Kowal的来源获得$q服务。因此,这个API引用来自马口铁。遗憾的是,我们“必须”支持IE8,因此指定了日期为Angular的版本(以及使用的文档链接)。@user2864740请参阅遗留AngularJS 1.2的更新。简而言之,这是一个很好的答案。我特别发现最后一句话非常有用。