异步功能未在等待中等待

时间:2020-10-21 14:31:00

标签: javascript asynchronous async-await es6-promise asynchronous-javascript

我需要向下滚动才能执行某些操作。我的诺言功能不在等待行中等待。我该如何解决这个问题?

let scrollingPromise = new Promise(async (resolve, reject) => {

    // I need this part to be done before resolving
    await page.evaluate(() => {
        const scrollingWindow = document.querySelector('.section-layout.section-scrollbox.scrollable-y.scrollable-show');
        var scrollCount = 0;

        function scrollFunction(){
            setTimeout(()=>{
                scrollingWindow.scrollBy(0, 5000);
                scrollCount++;
                if(scrollCount < 5){
                    scrollFunction();
                }
            }, 3000);
        };

        scrollFunction();

    });
    // but it resolves instantly doesn't wait for previous await
    resolve();
});

//this .then() runs before my scrolling
scrollingPromise.then(async () => {
    // ...
}

1 个答案:

答案 0 :(得分:2)

您正在混合await和Promise语法。您正在等待一个不返回Promise的异步函数,因此它无法工作。我相信您正在尝试这样做:

let scrollingPromise = new Promise((resolve, reject) => {
    page.evaluate(() => {
        const scrollingWindow = document.querySelector('.section-layout.section-scrollbox.scrollable-y.scrollable-show');
        var scrollCount = 0;

        function scrollFunction() {
            setTimeout(() => {
                scrollingWindow.scrollBy(0, 5000);
                scrollCount++;
                if (scrollCount < 5) {
                    scrollFunction();
                } else {
                    resolve() // <-- Done, resolve here
                }
            }, 3000);
        };

        scrollFunction();
    });
});