Angular承诺:拦截“然后”
Angular promise: intercept "then"
现在我有一个名为chartModelService
的Angular服务,上面有这个方法:
this.fetchChartModel = function() {
return $http.get(fullUrlPath);
};
我有一个Angular控制器来消耗这些数据:
chartModelService.fetchChartModel().then(function(rawData) {
var chartData = chartModelService.translate(rawData);
$scope.populateChart(chartData);
});
我想在chartModelService
中执行chartModelService.translate(data)
,而不是使用该服务的控制器。换句话说,我想将控制器更改为下面的代码,其中它接收的chartData
已经被翻译:
chartModelService.fetchChartModel().then(function(chartData) {
$scope.populateChart(chartData);
});
我如何改变chartModelService.fetchChartModel()
,使它在返回承诺的数据之前执行translate()
?
修改如下:
this.fetchChartModel = function() {
return $http.get(fullUrlPath);
};
:
this.fetchChartModel = function() {
var defObj = $q.defer();
var fetch = $http.get(fullUrlPath);
fetch.then(function(data){
defObj.resolve(chartModelService.translate(data));
});
return defObj.promise;
};
(当然,要在你的服务上使用适当的DI)
这将初始化数据获取,并在完成后返回一个包含翻译数据的承诺。
移动你的代码;)
this.fetchChartModel = function() {
return $http.get(fullUrlPath)
.then(function(rawData) {
return $q.resolve(chartModelService.translate(rawData);)
});
};
只要确保你的dependencies中包含了$q service
对我来说没有工作$q。解析,但是当
时可以使用$q.this.fetchChartModel = function() {
return $http.get(fullUrlPath)
.then(function(rawData) {
return $q.when(chartModelService.translate(rawData));
});
};
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 滚动然后捕捉到顶部而不是取消捕捉
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 拦截对构造函数的调用
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将display属性更改为visible flicks,然后再次消失
- 什么是“;选择“;然后触发事件
- 广告拦截处于活动状态,然后不要打开超链接到新标签
- Angular承诺:拦截“然后”