美文网首页
中止Fetch请求

中止Fetch请求

作者: _____西班木有蛀牙 | 来源:发表于2019-06-13 13:38 被阅读0次

AbortSignal 接口表示一个信号对象( signal object ),它允许您通过 AbortController 对象与DOM请求(如Fetch)进行通信并在需要时将其中止。

const controller = new AbortController();
const { signal } = controller;
// 发送请求
fetch(url, {signal}).then(function(response) {
  // do something...
}).catch(function(e) {
  reports.textContent = 'Download error: ' + e.message;
})
// 中止请求 调用
controller.abort();

[React] 在antd.design.pro 中

#第一步,我们先搞一个请求

模拟一下接口很慢,随便返回点儿什么东西

// mock/test.js
function getList (req, res) {
  // 模拟延时 10s
  setTimeout(() => {
    res.send('Ok');
  }, 10000);
}

export default {
  'GET /api/getlist': getList,
}

#第二步

servies里面建一个文件, 请求写好

// servies/test.js
import request from '@/utils/request';

export async function getlist({option}) {
  return request(`/api/getlist`, option)
}

#第三步了哈

models 里面简单的写一下

// models/test.js
import { getlist } from '@/services/test';

export default {
  namespace: 'test',

  state: {
    list: [],
  },

  effects: {
    *getList({ payload, callback }, { call }) {
      const response = yield call(getlist, payload);
      if (callback) callback(response)
    },
  },

  reducers: {},
}

#最后页面的代码就是下面了哈

// index.js
import React from 'react';
import { Button } from 'antd';

class Test extends React.PureComponent {
  state = {
    signal: null,
  }

  componentDidMount() {
    if ("AbortController" in window) {
      window.controller = new AbortController();
      this.setState({
        signal: window.controller.signal,
      })
    }
  }

  startRequest = () => {
    const { dispatch } = this.props;
    const { signal } = this.state;
    dispatch({
      type: 'test/getList',
      payload: {
        option: {
          credentials: 'include',
          signal,
        },
      },
      callback: res => {
        console.log(res)
      },
    });
  }

  stopRequest = () => {
    if ("AbortController" in window) {
      window.controller.abort();
    }
  }

  render() {
    return (
      <div>
        <Button onClick={this.startRequest}>发送请求</Button>
        <Button onClick={this.stopRequest}>中止请求</Button>
      </div>
    )
  }
}
export default Test;

相关文章

网友评论

      本文标题:中止Fetch请求

      本文链接:https://www.haomeiwen.com/subject/tmajfctx.html