繁体   English   中英

等待javascript递归函数返回true

[英]Await javascript recursive function to return true

所以我在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;
    }
}

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

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

console.log("Done!")

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

任何关于如何解决这个问题的想法将不胜感激!

你需要返回递归调用Promise链:

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

而是使用这个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!")

所有陈述将在完成后一个接一个地执行。
我猜的代码较少!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM