返回Bluebird包装angularjs $ http服务后运行angularjs $ digest

时间:2018-01-10 16:47:39

标签: javascript angularjs bluebird angularjs-http

所以我在服务中有一些代码如下:

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)

0 个答案:

没有答案