javascript - 在 promise 中链接回调

标签 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 请求中出现错误也是如此。

有什么帮助...?

最佳答案

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

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
});

关于javascript - 在 promise 中链接回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31014461/

相关文章:

javascript - 需要从数据表按钮操作将参数传递给模态 dlg

javascript - 在 Webpack 4 中创建 Node 库

angularjs - 将对象传递给组件

javascript - 使用 Promises 推迟 forEach 循环中的继续

javascript - Promise.method() 函数没有按照我期望的方式工作

javascript - 在谷歌地图中的信息窗口内单击按钮

javascript - 是否有任何非致命的 javascript 错误可以用于测试..?

angularjs - 带有 ionic 的YouTube播放器

javascript - Angular ng-options选择选项视觉反馈问题

javascript - 使用 Promise 时无法在 AngularJS 中正确同步流程