http-request-cancel-chrome
发布于:2021-09-24 19:45:39
访问:
review团队代码的时候发现这么一段,一看到某个操作依赖于上一个的异步行为,但处理不是走回调的时候,感觉就有问题了;
1 2 3 4 5 6 7 8 9 10 11 12
| # 有问题的代码 toDownload(files) { files.forEach(file => { const iframe = document.createElement('iframe') iframe.classList.add('downloading-iframe') iframe.src = file.url document.body.appendChild(iframe) }) setTimeout(() => { document.querySelectorAll('.downloading-iframe').forEach(i => i.remove()) }, 1000) },
|
这是一个批量在浏览器里面下载的按钮,导致的问题是,如果快速点击这个按钮,会导致请求被cancel;
在移除了
1 2 3
| setTimeout(() => { document.querySelectorAll('.downloading-iframe').forEach(i => i.remove()) }, 1000)
|
这段代码后,请求被cancel的情况不再发生;
即在上一个被load之前,就把上一批iframe标签remove了,这就导致了cancel(之所以快速点击按钮会让问题发生频繁,是因为每次点击会触发10个下载请求,这样会导致并发请求阻塞)
stackoverflow上回答图片:

我们可以看看被cancel的资源请求的状态:

一个没被cancel的

感谢鼓励