【问题标题】:Chaining callbacks within promises在 Promise 中链接回调
【发布时间】:2015-06-24 06:35:03
【问题描述】:

我有一个触发$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 请求中有错误。

任何帮助...?

【问题讨论】:

    标签: javascript angularjs promise angular-promise


    【解决方案1】:

    最好将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
    });
    

    【讨论】:

    • 我喜欢它的外观,但它似乎与我原来的替代方案相似,并且它仍然给我带来与我原来的替代方案相同的问题(请参阅我的问题中的第二个代码 sn-p (.then(...).then(...)) ) 其中来自原始请求的错误仍然导致调用successCallback函数......我错过了什么吗?
    • 啊!我看到您的最新编辑现在包括 return 和 $q.reject()。这就是我所缺少的。成功!感谢您的帮助!
    • 而不是return $q.reject(data) 不是拒绝throw 的标准方式吗?@ 987654326@ 会自动变成拒绝?
    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 2017-05-24
    • 2018-08-23
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多