我有一个请求功能:

function search(request) {
    return $http.post('/path/to/resource', request);
}


我可以这样称呼它:

search({/*...*/})
  .success(function() {})
  .error(function() {})


因为我经常需要通过ID查找某些对象,所以我需要一个快捷功能。我找不到如何创建此函数的方法,因此也可以将其与success()error()函数链接。

我搜索了如何在angular中创建promise,并找到了documentation about $q,这就是我尝试的方法:

function searchById(id) {
  var deferred = $q.defer();
  search({id: id}).
    then(function (response) {
      deferred.resolve(response.data.results[0]);
    }, function (error) {
      deferred.reject(error);
    });
    return deferred.promise;
}


我只能这样称呼它:

searchById().then(successCallback, errorCallback);


我希望能够这样称呼它:

searchById()
 .success(successCallback)
 .error(errorCallback);


关于$q的文档指示它返回promise,而关于$http的文档指示它返回httpPromise,但是我无法弄清楚如何创建httpPromise

任何想法?

最佳答案

用角度承诺错误回调应该捕获而不是错误,尝试这个

searchById()
 .then(successCallback)
 .catch(errorCallback);


sjokkogutten是正确的,在这种情况下您不需要使用$ q可以简化此操作

  var deferred = $q.defer();
  search({id: id}).
    then(function (response) {
      deferred.resolve(response.data.results[0]);
    }, function (error) {
      deferred.reject(error);
    });
    return deferred.promise;


对此

return search({id: id}).
  then(function (response) {
  return response.data.results[0];
  }

关于javascript - Angular httpPromise,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36986464/

10-09 15:37