javascript - page.evaluate 等待 ajax 完成加载

标签 javascript node.js puppeteer

我正在用 nodejs 开发一个 puppeteer 脚本。它有一个 ajax 来加载该脚本中的更多按钮。问题是,脚本不会等待 ajax 完成加载,从而让 page.evaluate 完成脚本而不等待 ajax 完成。我对新的 promise /等待有点困惑。有人可以帮我解决下面的脚本吗?

var result = await page.evaluate(({ stateSearched, areaSearched, pagePaginationNo }) => {
    function processThePage(){
        var itemResult = "testing"
        return {
            itemResult
        }
    }

    function loadMore(stateSearched,areaSearched,pagePaginationNo){
        $.ajax({
            url: "ajax.php",
            type: "GET"
        }).done(function (data) {
            if (nextPage == null) {
                lastResult = processThePage()
                return lastResult
            } else {
                loadMore(stateSearched,areaSearched,pagePaginationNo+1)
            }
        });
    }  

    loadMore(stateSearched,areaSearched,2)
})

最佳答案

您可以传递一个返回Promise 的函数给page.evaluate函数并在脚本完成后调用 resolve

代码示例

var result = await page.evaluate(() => new Promise(resolve => {
    // do all kind of asynchronous actions
    resolve(123);
}));
console.log(result); // 123

传递给 page.evaluate 的函数返回一个 promise ,在继续之前将等待解决。因此,您可以将任何异步代码放在 Promise 中。代码完成后调用 resolve。您传递给 resolve 函数的参数将返回给您的脚本。

关于javascript - page.evaluate 等待 ajax 完成加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56756910/

相关文章:

javascript - 无法定位和选择数组中的项目

javascript - 是否可以将旧的 Rally 任务板转换为新的 Cardboard

javascript - 在 javascript 中除以零的验证

JavaScript/jQuery - 文本变化

javascript - 双向、URL 友好的 Node.js slug 函数

javascript - 在 Typescript 中,如何在存储然后从数组访问所述对象时维护对象类型?

javascript - Node js 中内部文本的结果

javascript - 在已使用响应 Node js 后重定向

mysql - 使用 include 在何处进行 Sequelize

javascript - 如何处理同步执行时的 puppeteer 异常