我正在用 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/