2016-11-23 57 views
2

我有這個代碼在一個服務中,它適用於我。據我所知,$http.get()返回一個承諾,承諾異步執行,所以爲什麼我需要使用deffered.resolve(res.data)返回我的服務中的數據。非常感謝。

data.posts = function(page, perPage, format, orderBy) { 
     var deffered = $q.defer(); 
     $http.get(hostName, { 
      params: { 
       'page': page, 
       'per_page': perPage, 
       'filter[post_format]=': format, 
       'filter[orderby]=': orderBy, 
       'order': 'desc' 
      } 
     }).then(function(res) { 
      deffered.resolve(res.data); 
     }) 
     return deffered.promise; 
    } 
+0

不使用它。如果XHR GET發生錯誤,延期承諾將掛起。 – georgeawg

回答

0

如果真的在服務中,延期不需要。服務中的方法從上面的$ http請求返回承諾。

function exampleService($http) { 
    var data = this; 
    data.post = function(page, perPage, format, orderBy) { 
     return $http.get(hostName, { 
      params: { 
      'page': page, 
      'per_page': perPage, 
      'filter[post_format]=': format, 
      'filter[orderby]=': orderBy, 
      'order': 'desc' 
      } 
     }).then(function(res) { 
      //do stuff with success 
     }) 
     .catch(function(err) { 
      //do stuff with error 
     }) 
     .finally(function() { 
      //optionally use this as well maybe if you had loading type overlay/icon 
     }); 
    }; 
    } 
    //preferred method as it makes methods available before the sevice has been returned 

function exampleService($http) { 
    function post(page, perPage, format, orderBy) { 
     return $http.get(hostName, { 
      params: { 
      'page': page, 
      'per_page': perPage, 
      'filter[post_format]=': format, 
      'filter[orderby]=': orderBy, 
      'order': 'desc' 
      } 
     }).then(function(res) { 
      //do stuff with success 
     }) 
     .catch(function(err) { 
      //do stuff with error 
     }) 
     .finally(function() { 
      //optionally use this as well maybe if you had loading type overlay/icon 
     }); 
    } 
    //revealing module pattern 
    return { 
    post: post, 

    }; 
} 
0

爲什麼使用它?因爲作者不太瞭解。然而有many reasons not to use it

該代碼應閱讀

data.posts = function(page, perPage, format, orderBy) { 
    return $http.get(hostName, { 
     params: { 
      'page': page, 
      'per_page': perPage, 
      'filter[post_format]=': format, 
      'filter[orderby]=': orderBy, 
      'order': 'desc' 
     } 
    }).then(function(res) { 
     return res.data; 
    }); 
};