所以我在服务中有一些代码如下:
getData(params) {
// ... config, url
return this.$http.get(url, config)
.then(result => {...})
.catch((e) => {...})
}
我在像这样的组件中使用它:
ctrl.service.getData(params).then(result => {...}).catch((e) => {...})...;
问题是,我希望能够取消这个承诺,使用Bluebird可以轻松实现。但是如果我将$ http调用包装在Promise.resolve($http...)
中,那么我就错过了$ http调用触发的摘要周期,并且我的UI没有得到更新。有没有更好的方法从服务中返回Bluebird承诺?
getData(params) {
// ... config, url
return Promise.resolve( this.$http.get(url, config) )
.then(result => {...})
.catch((e) => {...})
}
这回复了我需要的蓝鸟承诺,我可以取消它,但是在我完成消耗控制器内部的承诺之前,这会触发angularjs $摘要,因此UI不会更新。 (我不想叫$ scope。$ apply)