在使用 axios 进行下载的时候,经常会出现下载到一半卡住的情况,而这种情况 axios 的 timeout 是没有用的,于是之前使用了 Promise.race() 来实现了一个超时。主要参考的是这篇文章。
但是这么一做就发现了新的问题。用来控制超时的 Promise 被 reject 之后,Promise.race() 的另外一边,也就是控制下载的 Promise 仍然在运行,造成了内存泄漏。
也就是这个问题描述的事情。
其实问题就是另外一个 Promise 必须手动 fulfill 或者 reject 。于是这里采用 axios 自己的 cancel 机制实现,在超时的同时把请求 cancel ,问题就完美解决了。
https://github.com/Last-Order/Minyami/commit/483628241e0ba45269e68619e0aa17f3db05cc56