我在使用$ q的AngularJS时创建单个承诺并且承诺已经解决,是否可以再次解决?我不知道这是否可能,但如果没有的话,我是否可以一次又一次解决同样的承诺。我正在考虑使用通知方式,但我不知道是否有其他方法来执行此操作。再次解决已解决的承诺
2
A
回答
4
从Mastering Web Application Development with Angularjs, by Kozlowski and Bacon,第3章,节“与$ Q无极API”“与后端服务器通信”:
这是解决或拒绝一次,不能改变其状态的承诺。
只有一次提供承诺结果的机会。换句话说它不是可能:
- 解决拒绝承诺
- 解决已经解决的承诺有不同的结果
- 拒绝一个解决承诺
- 拒绝被拒绝的承诺有不同拒绝原因
这些规则很直观。 例如,如果我们可以用比萨饼成功送达(可能已被吃掉!)之后比萨饼订单发货存在问题的信息回叫,那就没什么意义了。
如果您提供了更多的代码,并且我们可以更好地理解您正在尝试执行的操作,我们可能会帮助您。
+0
如果您需要来自承诺的多个值,承诺可能不是您所需要的。您可能会考虑使用Rx.js或Irakli“Gozala”的redurs等功能反应编程https://github.com/Gozala/reducers –
0
什么,我只是做的是重新初始化答应再次像这样:
var appReadyDeferred = $q.defer();
this.prepareAppReadyDeffered = function() {
appReadyDeferred = $q.defer();
};
this.appReady = function() {
return appReadyDeferred.promise;
};
this.appResolve = function() {
appReadyDeferred.resolve();
};
this.appDeferr = function() {
appReadyDeferred.reject();
};
所以我可以用
someService.appReady().then(function() {
// some code
});
而且使用
someService.prepareAppReadyDeffered();
重新初始化它,我不知道这是最好的解决方案,但它似乎工作。
相关问题
- 1. 承诺是解决
- 2. AngularJS解决承诺
- 3. 承诺解决之前内部承诺解决
- 4. 解决承诺内的多重承诺
- 5. 返回已经解决了承诺
- 6. 如何多次解决承诺?
- 7. 承诺解决不工作
- 8. 用EventListener解决承诺
- 9. 解决嵌套承诺
- 10. IE9:store.find承诺不解决
- 11. Angular $ http承诺不解决
- 12. 承诺不会解决
- 13. $ q承诺不解决
- 14. 使用$ q.when解决承诺?
- 15. 猫鼬承诺不解决
- 16. 解决承诺从链
- 17. 等待要解决的承诺,以解决在Angular.js中的另一个承诺
- 18. 需要帮助解决嵌套承诺,承诺没有得到解决
- 19. 角度ui路由器解决不解决链接的承诺
- 20. $ q承诺未解决负载,但更改状态解决它
- 21. $ q并解决角度的承诺
- 22. 我如何解决承诺的翻译?
- 23. 解决先前拒绝的承诺
- 24. 创建尚未解决的承诺es6
- 25. 解决方法git的承诺
- 26. 解决一个JavaScript的承诺
- 27. 解决循环中的承诺
- 28. 节点Promise返回对象的值为已解决的承诺
- 29. 如何解决另一个承诺内的承诺?
- 30. Chai承诺不等待先前的承诺解决
要“再次解决承诺”没有任何意义。例如,您最终可以重新发送相同的请求,但这完全不同。你想要做什么? – Blackhole
Richeve,这取决于你正在尝试做什么。正如其他人已经正确指出的那样,解决(或拒绝)的承诺不能改变状态。但是,您希望重新访问解决(或拒绝)承诺的值,这完全是另一回事,例如'myPromise.done(myfunc1); .... myPromise.done(myfunc2)' –