如何用vue-resource设置timeout回调?

发布于 2022-09-03 00:01:19 字数 1049 浏览 11 评论 0

module.exports = {
    name: 'segmentfault',
    methods: {
        loadData: function(uuid) {
            this.$http.get('/mockjs/test', // url
                           {a: 1},  // params
                           {timeout:500}  // options
                           ).then(
                           // success callback
                           function(response) {
                               console.log("成功这里没问题")
                           },
                           // fail callback
                           function(response) {
                               console.log(response.status); //为0
                               console.log(response.statusText); //为空
                               console.log("黑人问号?");
                           }

需求:
我想实现超时后写一个回调

我的思路
如果能够知道statusText是timeout,然后我就修改data的某一个值x,然后再用watch监听x,然后来写timeout的回调。

我遇到的问题
statusText并没有显示timeout。。呵呵。。

请问大家有没有解决方法?或者其他方法?谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伪装你 2022-09-10 00:01:19

VueResource 其實還是有一些 bug ,有空再寫個 PR ...

研究了下源碼,可以透過一些方式實現你要的結果,首先是設置 timeout ,會觸發 timeout interceptor

這是原本的 timeout interceptor

export default function (request, next) {

    var timeout;
       
    // 有設置值就啟動一個定時器
    if (request.timeout) {
        timeout = setTimeout(() => {
            // 這裡有問題,作者寫了一個 request.abort() , 這裡卻用 cancel() 囧
            // 所以在 timeout 觸發時就會出問題
            // 就算是 abort ,也只會 request 被取消掉,不會有任何返回
            // 就像你看到的 status statusText 都是空的
            request.cancel();
        }, request.timeout);
    }

    next((response) => {

        clearTimeout(timeout);

    });
}

在不修改源碼的前提下,我們要繞過原本的 timeout interceptor ,自己實現一個 timeout interceptor 的流程 ,所幸是作者提供了增加自定義 interceptor 的方法,下面是我的實現方式,有兩種,可以改成其他符合你需求的

timeout 照樣回傳 resposne

jsFiddle

timeout 中斷 Request ,不會有任何 response ,但會觸發設置的 onTimeout 事件

jsFiddle

待天淡蓝洁白时 2022-09-10 00:01:19

方法1并不会timeout触发并不会停止请求

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文