javascript - 取消 Angular 服务 promise

标签 javascript angularjs angular-promise angular-http

我有一个执行 http 请求的 Controller 。
此请求可能需要 2 秒到 4 分钟才能返回一些数据。
我添加了一个按钮,如果搜索需要很长时间才能完成,用户应该单击该按钮来取消请求。

Controller :

$scope.search = function() {
    myFactory.getResults()
        .then(function(data) {
        // some logic
        }, function(error) {
        // some logic
    });
}

服务:

var myFactory = function($http, $q) {
    return {
        getResults: function(data) {
            var deffered = $q.dafer();
            var content = $http.get('someURL', {
                data: {},
                responseType: json
            )}

            deffered.resolve(content);
            returned deffered.promise;
        }
    }
}

按钮点击:

$scope.cancelGetResults = function() {

    // some code to cancel myFactory.getResults() promise

}

如何实现单击按钮来取消 myFactory.getResults() promise ?

最佳答案

问题使用 deferred antipattern通常应该避免这种情况,但它适合取消情况:

getResults: function(data) {
    var deffered = $q.defer();

    $http.get('someURL', {
        data: {},
        responseType: json
    }).then(deffered.resolve, deferred.reject);

    deffered.promise.cancel = function () {
      deferred.reject('CANCELLED')
    };

    returned deffered.promise;
}

关于javascript - 取消 Angular 服务 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41125333/

相关文章:

javascript - 在 Angular 中嵌套指令的正确方法

javascript - AngularJS:使用拦截器更新 token (使用服务)

javascript - 使用 typeof 等待直到变量存在会导致无限循环

javascript - Firebase 在我的 Node.js 应用程序中的行为不正常

javascript - Angular ionic 徽章计数未更新

javascript - Angular $http.get : How to catch all the errors?

angular - 如何定位 Angular promise 或 observable 中的错误?

javascript - 如何在 promise 后填充 Angular ui-select 选项?

javascript - 我想创建一个页面,该页面的按钮应放置在随机位置

javascript - 表格不绑定(bind)到模型的 knockout 选项