承诺中的setTimeout-如何解决以及为什么它只运行一次?

我想基于Promise中的setTimeout模拟基于随机时间的鼠标滚动。我的目标是继续向下滚动到网页的底部:应重复调用autoScroll函数,直到到达底部为止,然后解决Promise。当前代码仅运行一次,然后出现2个错误:未捕获的ReferenceError:未定义loopScroll(在浏览器控制台中)UnhandledPromiseRejectionWarning(在VSCode中)。


async function loopScroll(page) { 

    await page.evaluate(async () => {

        await new Promise((resolve, reject) => {

            let rand = Math.round(Math.random() * (3000 - 500)) + 500;

            setTimeout(function () {

                function autoScroll() {

                    let scrollHeight = document.body.scrollHeight;

                    let currentHeight = 0;

                    let distance = 100;

                    window.scrollBy(0, distance);

                    currentHeight += distance;

                    if (currentHeight >= scrollHeight) {

                        resolve();

                    }

                }

                autoScroll();

                loopScroll(page);

            }, rand);

        });

    });

};

这个异步-承诺的事情让我有些困惑,我对他们没有太多的经验,所以我真的不知道我在做什么错。提前致谢。


拉莫斯之舞
浏览 260回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript