创建了一个工厂“resInterceptor”,其中我使用了在工厂外部定义的函数(requestInterceptor,responseInterceptor)。并且在函数内部给出错误“$ q未定义”。但是我只想这样做。请建议如何访问requestInterceptor和responseInterceptor内部的$ q。

angular.module('resModule', ['ngResource', 'ngCookies'])
 .factory('resInterceptor', ['$rootScope', '$q', '$location', resInterceptor]);

 function resInterceptor($rootScope, $q, $location) {
    return {
        request: requestInterceptor,
        response: responseInterceptor,
    };
}

function requestInterceptor(config) {
   return config || $q.when(config); //$q is not defined
}

function responseInterceptor(response) {
   return response || $q.when(response);
}

最佳答案

为了使它起作用,您需要显式传递$q并使requestInterceptor返回实际的回调函数:

function resInterceptor($rootScope, $q, $location) {
  return {
    request: requestInterceptor($q),
    ..
  };
}

function requestInterceptor($q) {
  return function (config) {
    return config || $q.when(config);
  };
}

当然,如果您仅将函数内联到首先定义$q的同一作用域中,则此方法就不会那么复杂。

关于javascript - $ q未在函数中定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30119236/

10-11 14:06