Code Monkey home page Code Monkey logo

Comments (13)

parox2014 avatar parox2014 commented on August 17, 2024 5

@sahibalejandro I've tried this.The beforeSend's arguments is a request object,But it's property xhr is null

from vue-resource.

steffans avatar steffans commented on August 17, 2024

Yes, it's possible to add a abort() function to the promise object, which the HTTP request function returns. This will allow a syntax similar to jQuery.

from vue-resource.

JosephSilber avatar JosephSilber commented on August 17, 2024

@steffans that's great news!

Always prefer the pragmatic approach over some dream of ideal architectural purity πŸ˜„

from vue-resource.

JosephSilber avatar JosephSilber commented on August 17, 2024

The way it currently works will have to be refactored a bit.

We now don't have access to the xhr outside the resolver function. If we are to augment the promise with an abort function, we'll need access to the underlying xhr object.

Probably something like this:

var request;

var promise = new Promise((resolve, reject) => {
    request = xhr(url, options, resolve, reject);
});

promise.abort = request.abort.bind(request);

from vue-resource.

sahibalejandro avatar sahibalejandro commented on August 17, 2024

Any examples about how to use this feature? I'm trying to use it but get abort is not a function error.

from vue-resource.

steffans avatar steffans commented on August 17, 2024

You could use the beforeSend callback to access the request object and a add your code to abort the current request.

this.$http.post('url', function (data) {}, {beforeSend: function(xhr) {
    // use XMLHttpRequest and add xhr.abort callback
}});

from vue-resource.

sahibalejandro avatar sahibalejandro commented on August 17, 2024

Nice, it works! I ended with something like this:

beforeSend(xhr) {
    if (globalXhr) {
        globalXhr.abort();
    }

    globalXhr = xhr;
}

from vue-resource.

BrockReece avatar BrockReece commented on August 17, 2024

@WilliamDu1981
I've just had the same issue and looked at the request object, it has a cancel function which aborts the request behind the scenes for you. The code below is working for me

beforeSend(xhr) {
    if (this.lastRequest) {
        this.lastRequest.cancel()
    }
    this.lastRequest = xhr
},

from vue-resource.

parox2014 avatar parox2014 commented on August 17, 2024

@BrockReece I've tried your code:

this.$http.get('/users',{},{
        beforeSend(xhr){
          debugger;
          if (this.lastRequest) {
            this.lastRequest.cancel()
          }
          this.lastRequest = xhr

        }
      });

but throw an error below:

App.vue?0940:60 Uncaught (in promise) TypeError: this.lastRequest.cancel is not a function(…)

The lastRequest object has not a method named cancel,and it is not a xhr(instance of XMLHttpRequest) object,it's a request object. why?

from vue-resource.

BrockReece avatar BrockReece commented on August 17, 2024

I don't know sorry.
The source shows the object should have a cancel method

https://github.com/vuejs/vue-resource/blob/a27faffb8dbf7a7d7a7aaa8e3792e93f48a8a8c5/src/http/client/xhr.js#L14

Can you console.log the lastRequest obj?

from vue-resource.

parox2014 avatar parox2014 commented on August 17, 2024

@BrockReece I've watched expression and screenshots,can you upload screenshots of your whole code

vue-resource

from vue-resource.

BrockReece avatar BrockReece commented on August 17, 2024

@WilliamDu1981 This is my code that works, what version of vue resource are you using?

this.$http.post(this.url, data, {
    beforeSend(xhr) {
        if (this.lastRequest) {
            this.lastRequest.cancel()
        }
        this.lastRequest = xhr
    },
}).then(response => {
...
}

from vue-resource.

parox2014 avatar parox2014 commented on August 17, 2024

@BrockReece I install it via npm,It should be the newest version。
I find the code in xhr.js:

var xhr = new XMLHttpRequest(), response = {request: request}, handler;

        request.cancel = () => {
            xhr.abort();
        };

I add breakpoints in this code and beforeSend,I found it execution after beforeSend,so when the beforeSend execution,the cancel method is not defined yet;

from vue-resource.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.