Restangular - 如何 cancel/implement 我自己的要求

Restangular - how to cancel/implement my own request

我找到了一些使用 fullRequestInterceptorhttpConfig.timeout 允许取消 restangular 请求的示例。

example 1 | example 2

这就是我添加拦截器的方式:

    app.run(function (Restangular, $q) {
        Restangular.addFullRequestInterceptor(function (element, operation, what, url, headers, params, httpConfig) {

我设法通过在超时中放置已解决的承诺来中止请求(导致记录错误并且请求发出但被取消),这不是我想要的。

我想做的事 - 我想用自己的请求发出 AJAX 请求,并将结果传回使用 Restangular 的任何组件。这可能吗?

我经常使用 requestInterceptor,但仅用于更改参数和 headers 我的请求。

基本上,addFullRequestInterceptor 可以帮助您在发送请求之前对其进行更改。那么为什么不更改要调用的 url 呢?

您可以修改 httpConfig object 和 return,如果它接近 $http 的配置(我敢打赌它是),您可以更改 url 甚至方法,等等,把原来的要求改成另外一个,全知道了。

在那之后你不需要超时只return根据你的需要定制一个 httpConfig。

RestangularConfigurer.addFullRequestInterceptor(function (element, operation, route, url, headers, params, httpConfig) {

        httpConfig.url = "http://google.com";
        httpConfig.method = "GET";
        httpConfig.params = "";

        return {
            httpConfig: httpConfig
        };
    });

它会被传递,你的服务或控制器不会知道有什么变化,这就是拦截器的原理,它允许你改变东西并 returning 被下一个进程使用有点像中间件。因此,这对拨打电话的人来说是透明的,但会根据您的需要拨打电话。

我一直在寻找休息angular的方法来解决它,但我应该一直在寻找angular的方法:)

Overriding dependency at runtime in AngularJS

看起来您可以在它到达 Restangular 之前扩展 $http。我还没有尝试过,但看起来它可以 100% 满足我的需求。