等待javascript递归函数返回true

Him*_*mad 3 javascript node.js async-await puppeteer

所以我在 nodeJS 中使用 puppeteer 并且我有一个递归调用自身的函数,直到正确加载指定的页面:

const isPageAccessible = async (page, url) => {
    var pageRes = await page.goto(url, {
        timeout: 10000
    }).catch(e => console.log(e));
    if (!pageRes || pageRes.status !== 200) {
        console.log("Website didn't load properly.")
        isPageAccessible(page, url);
    } else {
        console.log("Loaded!")
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是这个函数在第一次递归调用后返回 undefined (据我所知这是正常的,因为异步函数必须用一个值解析)。我希望代码等到这个函数解决true

console.log(await isPageAccessible(page,LOGIN_URL));

console.log("Done!")
Run Code Online (Sandbox Code Playgroud)

所以控制台会记录“完成!” 网站加载成功后。现在它正在记录“完成!” 即使网站尚未加载,因为isPageAccessible函数在第一次调用后返回 undefined。

任何有关如何解决此问题的想法将不胜感激!

Cer*_*nce 5

您需要返回Promise 链的递归调用:

if (!pageRes || pageRes.status !== 200) {
  console.log("Website didn't load properly.")
  return isPageAccessible(page, url);
}
Run Code Online (Sandbox Code Playgroud)