axios
1、使用 CancelToken.souce 工厂方法创建一个 cancel token
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const CancelToken = axios.CancelToken; const source = CancelToken.source();
axios.get('https://mdn.github.io/dom-examples/abort-api/sintel.mp4', { cancelToken: source.token }).catch(function (thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { } });
source.cancel('Operation canceled by the user');
|
2、通过传递一个 executor 函数到 CancelToken 的构造函数来创建一个 cancel token
1 2 3 4 5 6 7 8 9 10 11 12
| const CancelToken = axios.CancelToken; let cancel;
axios.get('https://mdn.github.io/dom-examples/abort-api/sintel.mp4', { cancelToken: new CancelToken(function executor(c) { cancel = c; }) });
cancel('Operation canceled by the user.');
|
fetch
使用Web提供的AbortController接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const controller = new AbortController(); let signal = controller.signal; console.log('signal 的初始状态: ', signal);
const downloadBtn = document.querySelector('.download'); const abortBtn = document.querySelector('.abort');
downloadBtn.addEventListener('click', function(){ fetch(url, {signal}).then(function(response) { }).catch(function(e) { console.log('Download error: ' + e.message); }) });
abortBtn.addEventListener('click', function() { controller.abort(); console.log('signal 的中止状态: ', signal); });
|
[文章来源于](https://mp.weixin.qq.com/s/OvipsKTx1786wqrc7bEObg)