在專案定義了兩個服務,獲取task
和project
,如果在controller中一起獲取他們的數據然後進行賦值呢?目前我是透過
js
taskService.get({id:id},function(data1){ //... projectService.get({id:id},function(data2){ //里面赋值的操作很长 ... }) })
請問大神們採用$q的方式應該如何寫,還有我在很多地方會用到這個獲取數據的操作,如何讓他們復用呢?謝謝
滿天的星座2017-05-15 16:54:24
根據你的要求寫了一下,可以看下面的程式碼:
javascript
myApp.controller("MyController", ["$q", "taskService", "projectService", function($q, taskService, projectService){ var deferred = $q.defer(); var promise = deferred.promise; deferred.resolve( // 获取你要处理的对象 var result = yourMethod.get({id: id}); ); deferred.reject( // 获取不到是打印错误 ) promise.then(function(result){ // 如果经过taskService处理的数据还需要projectService进行处理的话,返回这个结果 var obj = taskService.func(result); return obj; },function(error){ // 错误处理 }) .then(function(result){ // 用projectService处理获取到的对象 projectService.func(result); },function(error){ // 错误处理 }); }]);
如果想重複使用的話,可以將這個整體當做一個服務,因為不知道你具體的代碼,所以也不好說.
伊谢尔伦2017-05-15 16:54:24
可以在service中增加一個方法,是同時取得兩個的就OK了,例如:
js
// someService 中 伪代码 someService.getAll = function(id) { var pmo = $q.all([taskService.get({id:id}), projectService.get({id:id})]); // 根据情况,可以写下边的代码,也可以直接返回这个pro pmo.then(....) }