用消息取消承诺



在预先键入的情况下,我正在取消上一个调用,以防它尚未返回并且已进行新调用,使用以下代码:

function($http, $window, $q, $timeout){
        var suggestions = [];
        var cancel = $q.defer();
        return {
            getSuggestions : function(inputText){
                var deferred =$q.defer();
                var promise = deferred.promise;
                cancel.resolve('request cancelled');
                cancel = $q.defer();
                var baseUrl = "http://localhost:8080/PackagingTest/hello";
                var params = {
                    query : inputText,
                    suggestionsSize : 10
                }
                $http.get(baseUrl, {params : params, timeout : cancel.promise}).then(
                    function(response){
                        suggestions = repsonse;
                        deferred.resolve(suggestions);
                    }, function(error){
                        //check if cancelled and log the error message
                        if(){
                                console.log(someErrorMsg);//should log 'request cancelled'
                        }
                        console.log(error);
                        deferred.reject(error);
                    });
                return promise;
            }
        }
    }

每次发出新请求时,都会取消上一个请求。但我无法收到已取消的状态消息。$http错误处理程序是使用 data: null, status: -1, config: Object, statusText: "", headers: function 调用的,我找不到文本的任何属性。我做错了还是在请求中止时无法附加消息?

实际上没有办法将数据传递给abort上的catch处理程序。下面是 angular 内部使用的onabort回调:

  var requestError = function() {
    // The response is always empty
    // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
    completeRequest(callback, -1, null, null, '');
  };

其中completeRequest的定义是:

function completeRequest(callback, status, response, headersString, statusText) {...}

最新更新