等待 javascript 递归函数为 return 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;
}
}
这里的问题是这个函数在第一次递归调用后返回未定义(据我所知这是正常的,因为异步函数必须用一个值来解析)。我希望代码等到此函数解析为 true
console.log(await isPageAccessible(page,LOGIN_URL));
console.log("Done!")
所以控制台会在网站加载成功后记录 "Done!"。现在它正在记录 "Done!" 即使该网站尚未加载,因为 isPageAccessible
函数在第一次调用后返回未定义。
任何关于如何解决这个问题的想法都将不胜感激!
您需要return 递归调用 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!")
所有的语句执行完后会依次执行
我猜代码少了!!
所以我在 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!")
所以控制台会在网站加载成功后记录 "Done!"。现在它正在记录 "Done!" 即使该网站尚未加载,因为 isPageAccessible
函数在第一次调用后返回未定义。
任何关于如何解决这个问题的想法都将不胜感激!
您需要return 递归调用 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!")
所有的语句执行完后会依次执行
我猜代码少了!!