page.evaluate дождитесь окончания загрузки ajax - PullRequest
1 голос
/ 25 июня 2019

Я занимаюсь разработкой сценария кукловода в nodejs.В этом скрипте есть ajax для кнопки «загрузить больше».Дело в том, что скрипт не ожидает окончания загрузки ajax, оставляя страницу.Я немного запутался в новых обещаниях / ожиданиях.Может ли кто-нибудь помочь мне с сценарием ниже?

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)
})

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Вы можете передать функцию, которая возвращает 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. Позвоните resolve, когда ваш код будет завершен. Аргумент, который вы передаете функции resolve, будет возвращен вашему сценарию.

0 голосов
/ 25 июня 2019

во время исследования я наткнулся на пример его работы. Это было как-то похоже на ответ Томаса. Я хотел бы получить значения itemResult. Есть ли у вас какие-либо идеи о том, как их получить ??

var result = await page.evaluate(({ stateSearched, areaSearched, pagePaginationNo }) => {
    return new Promise((resolve, reject) => {
        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)


        //how do i get itemResult??
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...