等待javascript递归函数返回true

时间:2018-09-16 02:38:47

标签: 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;
    }
}

这里的问题是,该函数在第一次递归调用后返回未定义的值(据我所知,这是正常的,因为异步函数必须使用值来解析)。我希望代码等待,直到此功能以true

解析。
console.log(await isPageAccessible(page,LOGIN_URL));

console.log("Done!")

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

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

2 个答案:

答案 0 :(得分:4)

您需要返回以递归方式调用Promise链:

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

答案 1 :(得分:-1)

请改为使用此npm模块,
 https://www.npmjs.com/package/sync-request

    var request = require('sync-request');
    var res = request('GET', 'http://example.com');
    console.log(res.getBody());
    console.log("Done!")

所有语句将在完成后一个接一个地执行。
我猜较小的代码!