在承诺中链接回调

时间:2015-06-23 22:14:44

标签: javascript angularjs promise angular-promise

我有一个触发$http请求的工厂函数。此函数本身接受成功回调和错误回调函数(successCallbackerrorCallback)...

var makeRequest = function(options, successCallback, errorCallback) {
  $http(options)
    .then(function() {
      // do success things
      successCallback();
    }, function() {
      // do error things
      errorCallback();
    });
};

这是处理后续回调的推荐方式(successCallbackerrorCallback)吗?

我的直觉说“没有”,但我显然在这里缺少一些概念上的理解...

我原以为以下会更合适

var makeRequest = function(options, successCallback, errorCallback) {
  $http(options)
    .then(function() {
      // do success things
    }, function() {
      // do error things
    })
    .then(successCallback, errorCallback);
};

但即使successCallback请求中存在错误,也会调用$http

任何帮助......?

1 个答案:

答案 0 :(得分:2)

最好将makeRequest函数抽象为没有任何回调概念。它只是提出请求并返回承诺。消费者如何处理这个承诺,订阅成功或错误回调是不是。

var makeRequest = function (options) {
    return $http(options).then(function () {
        // do success things, construct data if needed to resolve promise with
        return data;
    }, function () {
        // do error things, construct error object if needed to reject with
        return $q.reject(data);
    });
};

makeRequest({url: '/something', method: 'GET'}).then(function() {
    // success callback
}, function() {
    // error callback
});