全球主机交流论坛

标题: (已解决)大佬指教下js异步中如何添加延时 [打印本页]

作者: qingseyouran    时间: 2022-3-6 21:00
标题: (已解决)大佬指教下js异步中如何添加延时
本帖最后由 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);
    }
作者: peng123    时间: 2022-3-6 21:06
不懂

作者: VPSMarket    时间: 2022-3-6 21:08
settimeout 的回调里面再执行下载
作者: qingseyouran    时间: 2022-3-6 21:08
peng123 发表于 2022-3-6 21:06
不懂

略懂c和python,不懂js,看不懂执行逻辑
作者: qingseyouran    时间: 2022-3-6 21:10
VPSMarket 发表于 2022-3-6 21:08
settimeout 的回调里面再执行下载

settimeout弄了好久,不知道加哪里才可以
加最后面那一段里?
作者: kapai    时间: 2022-3-6 21:20
本帖最后由 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.     }
复制代码

作者: HOH    时间: 2022-3-6 21:21
不管啥语言,最烦的就是匿名方法
作者: 靓坤    时间: 2022-3-6 21:24
用settimeout把fetch那里包住即可
作者: qingseyouran    时间: 2022-3-6 21:32
kapai 发表于 2022-3-6 21:20

不行,只能下载第一页
作者: qingseyouran    时间: 2022-3-6 21:33
靓坤 发表于 2022-3-6 21:24
用settimeout把fetch那里包住即可

好的。我试下,这个fetch套得太多
作者: darius    时间: 2022-3-6 21:38
  1. new Promise((resolve, reject) => {
  2.     setTimeout(() => {
  3.         var a = document.createElement('a');
  4.         var url = window.URL.createObjectURL(blob);
  5.         var filename = page + '.jpg';
  6.         a.href = url;
  7.         a.download = filename;
  8.         a.click();
  9.         resolve()
  10.     }, 1000);
  11. }).then(_ => {
  12.     window.URL.revokeObjectURL(url);
  13.     if(pageCurrent<pageTotal){
  14.         pageCurrent++;
  15.         downloadPic(pageCurrent);
  16.     }
  17. })

复制代码


替换fetch(picUrl).then(res => res.blob().then(blob => { 里的试下,能不能用我也不知道,因为我也是菜鸟
作者: qingseyouran    时间: 2022-3-6 21:42
靓坤 发表于 2022-3-6 21:24
用settimeout把fetch那里包住即可

            setTimeout(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);
                }
            })), 9000)

不行,还是下得飞起
作者: qingseyouran    时间: 2022-3-6 21:44
darius 发表于 2022-3-6 21:38
替换fetch(picUrl).then(res => res.blob().then(blob => { 里的试下,能不能用我也不知道,因为我也是菜 ...

好,马上试下
作者: qingseyouran    时间: 2022-3-6 21:55
darius 发表于 2022-3-6 21:38
替换fetch(picUrl).then(res => res.blob().then(blob => { 里的试下,能不能用我也不知道,因为我也是菜 ...

            fetch(picUrl).then(res => res.blob().then(blob => {
new Promise((resolve, reject) => {
    setTimeout(() => {
        var a = document.createElement('a');
        var url = window.URL.createObjectURL(blob);
        var filename = page + '.jpg';
        a.href = url;
        a.download = filename;
        a.click();
        resolve()
    }, 1000);
}).then(_ => {
    window.URL.revokeObjectURL(url);
    if(pageCurrent<pageTotal){
        pageCurrent++;
        downloadPic(pageCurrent);
    }
})
            }))
        }

也只能下第一页
作者: qingseyouran    时间: 2022-3-6 21:56
darius 发表于 2022-3-6 21:38
替换fetch(picUrl).then(res => res.blob().then(blob => { 里的试下,能不能用我也不知道,因为我也是菜 ...

这个嵌套回调,完全看不懂
作者: qingseyouran    时间: 2022-3-6 22:00
kapai 发表于 2022-3-6 21:20

console提示
Uncaught ReferenceError: downloadPic is not defined
    at <anonymous>:1:1
作者: qingseyouran    时间: 2022-3-6 22:17
把代码里的downloadPic(pageCurrent)删除,手动点可以下载一页,一直点可以顺序下载,到时再配合个自动化脚本。
有空再研究了。
作者: qingseyouran    时间: 2022-3-7 11:45
3.9号,问题已经解决。




欢迎光临 全球主机交流论坛 (https://hostloc.9hanju.com/) Powered by Discuz! X3.4