全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1016|回复: 17

[经验] (已解决)大佬指教下js异步中如何添加延时

[复制链接]
发表于 2022-3-6 21:00:28 | 显示全部楼层 |阅读模式
本帖最后由 qingseyouran 于 2022-3-7 11:44 编辑

3.7号补充
使用for已经解决该问题,settimeout就是不行


谢谢几位坛朋的帮忙,不过还是不行。
只能弄个间接的,
把代码里的downloadPic(pageCurrent)删除,手动点可以下载一页,一直点可以顺序下载,到时再配合个自动化脚本。
有空再研究了。
有大佬的话,帮忙再研究研究。


下面代码下载太快了,过一会就会下载失败,想添加个延时,非码农,不懂js,网上找了半天弄不好,麻烦大佬指教下。

    if(document.location.pathname.indexOf("onlinebook")>0){
        document.body.oncontextmenu = ""
        var pageTotal = 0;
        var picUrl = ""
        //从0开始,为实际页码减一
        var pageCurrent = 0;
        //下载指定页面图片
        function downloadPic(page) {
            picUrl = path + "&pageNo=" + page ;
            fetch(picUrl).then(res => res.blob().then(blob => {
                var a = document.createElement('a');
                var url = window.URL.createObjectURL(blob);
                var filename = page + '.jpg';
                a.href = url;
                a.download = filename;
                a.click();
                window.URL.revokeObjectURL(url);
                if(pageCurrent<pageTotal){
                    pageCurrent++;
                    downloadPic(pageCurrent);
                }
            }))
        }
        //批量下载
        function batchDownload() {
            pageTotal = document.getElementById("sumNumb").innerText - 1;
            downloadPic(pageCurrent)
        }
        //创建下载按钮
        var downloadBtn = document.createElement("a");
        downloadBtn.innerText = "批量下载全书";
        downloadBtn.onclick = function () { batchDownload() };
        document.querySelector("body > div.divcenter > div.bq > div.bqmiddle > div.ml").appendChild(downloadBtn);
    }
发表于 2022-3-6 21:21:55 | 显示全部楼层
不管啥语言,最烦的就是匿名方法
发表于 2022-3-6 21:08:01 | 显示全部楼层
settimeout 的回调里面再执行下载
 楼主| 发表于 2022-3-6 21:08:52 | 显示全部楼层

略懂c和python,不懂js,看不懂执行逻辑
 楼主| 发表于 2022-3-6 21:10:42 | 显示全部楼层
VPSMarket 发表于 2022-3-6 21:08
settimeout 的回调里面再执行下载

settimeout弄了好久,不知道加哪里才可以
加最后面那一段里?
发表于 2022-3-6 21:20:41 | 显示全部楼层
本帖最后由 kapai 于 2022-3-6 21:23 编辑
  1.    if(document.location.pathname.indexOf("onlinebook")>0){
  2.         document.body.oncontextmenu = ""
  3.         var pageTotal = 0;
  4.         var picUrl = ""
  5.         //从0开始,为实际页码减一
  6.         var pageCurrent = 0;
  7.         //下载指定页面图片
  8.         function downloadPic(page) {
  9.             picUrl = path + "&pageNo=" + page ;
  10.             fetch(picUrl).then(res => res.blob().then(blob => {
  11.                 var a = document.createElement('a');
  12.                 var url = window.URL.createObjectURL(blob);
  13.                 var filename = page + '.jpg';
  14.                 a.href = url;
  15.                 a.download = filename;
  16.                 a.click();
  17.                 window.URL.revokeObjectURL(url);
  18.                 if(pageCurrent<pageTotal){
  19.                     pageCurrent++;
  20.                      setTimeout("downloadPic(pageCurrent)",1000*5);
  21.                     //downloadPic(pageCurrent);
  22.                 }
  23.             }))
  24.         }
  25.         //批量下载
  26.         function batchDownload() {
  27.             pageTotal = document.getElementById("sumNumb").innerText - 1;
  28.             downloadPic(pageCurrent)
  29.         }
  30.         //创建下载按钮
  31.         var downloadBtn = document.createElement("a");
  32.         downloadBtn.innerText = "批量下载全书";
  33.         downloadBtn.onclick = function () { batchDownload() };
  34.         document.querySelector("body > div.divcenter > div.bq > div.bqmiddle > div.ml").appendChild(downloadBtn);
  35.     }
复制代码
发表于 2022-3-6 21:24:50 来自手机 | 显示全部楼层
用settimeout把fetch那里包住即可
 楼主| 发表于 2022-3-6 21:32:14 | 显示全部楼层

不行,只能下载第一页
 楼主| 发表于 2022-3-6 21:33:21 | 显示全部楼层
靓坤 发表于 2022-3-6 21:24
用settimeout把fetch那里包住即可

好的。我试下,这个fetch套得太多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-4 04:55 , Processed in 0.061832 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表