等待 javascript 递归函数返回 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;
}
}

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

console.log(await isPageAccessible(page,LOGIN_URL));
console.log("Done!")

因此,控制台将在网站成功加载后记录"完成!现在它正在记录"完成!",即使网站尚未加载,因为isPageAccessible函数在第一次调用后返回未定义。

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

你需要在 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!")

完成后,所有语句将陆续执行。
我猜代码更少!!

相关内容

  • 没有找到相关文章

最新更新