axios 是一个非常方便的请求库,但是缺没有原生提供一个 abort 接口,因为 axios 的返回是一个 promise,我们可以利用 promise 的特性来实现一个 abort 方法
Promise.race
promise.race 方法从字面意思上就是赛跑,其中只要有任意一个完成了,就返回完成的那个,有一个失败了,就改为失败,利用这个特性就能完成我们的 abort 方法
Promise.race([
// 等待取消组
new Promise((_resolve, reject) => {
notify.onClose = function() {
reject(new Error('手动停止导出!'))
}
}),
// 获取数据组
axios.get()
)
当然,例子中利用了 element-ui 的 notify 组件,绑定了 notify 组件的 onClose 方法,实际上也可以通过封装对象的方式实现