"重新发送“;Angular$http请求

"Resend" an Angular $http request

本文关键字:http Angular 请求 新发送 quot      更新时间:2023-09-26

我在这样一个有角度的应用程序中有一个$http承诺:

this.data = $http.get('/api/foo', {})

然后,我的应用程序的其他部分将成功和错误处理程序添加到这个承诺中。

我的问题是,我想刷新this.data变量中的信息,然后重新运行promise的所有附加处理程序。这可以用某种this.data.$refresh()方法来完成吗?还是我必须将所有处理程序存储在其他地方,并将它们重新附加到新的$http.get?


编辑:也许有一个稍微清晰的例子:

this.data = $http.get('/api/foo', {})
this.data.success(doSomething)
// doSomething() runs because the response arrives.
this.data.someMagic()
// doSomething() runs again without being reattached.

我想避免的是:

this.data = $http.get('/api/foo', {})
this.data.success(doSomething)
// Time passes...
this.data = $http.get('/api/foo', {}) // All old handlers have now been thrown away.
this.data.success(doSomething)

这是因为成功和错误都有几个处理程序,而且它们是由不同的控制器和服务添加的,所以每次更新变量时,都需要一些混乱的回调系统来让它们重新附加处理程序。

重新运行promise的所有附加处理程序。

不,那是不可能的。根据约定,promise只解析和执行其处理程序一次。

我是否必须将所有处理程序存储在其他地方,并将它们重新附加到新的$http.get?

是的,这是一个可能的解决方案,尽管它失去了承诺的所有美好属性,如可链接性。您还可以简单地放置一个EventEmitter并实现某种pub-sub(例如,请参见Angularjs pub-sub与$broadcast)。

如果你想拥有一个包含各种好东西的真实流接口,你可能想研究FRP,例如Bacon.js和angular Bacon。