Javascript js不会等到承诺兑现
我想在木偶师的帮助下从一个网站上获得一些链接Javascript js不会等到承诺兑现,javascript,node.js,async-await,puppeteer,Javascript,Node.js,Async Await,Puppeteer,我想在木偶师的帮助下从一个网站上获得一些链接 async function getLinks(){ const first = 'first'; const last = 'last'; const browser = await browserControl.startBrowser(); const page = await browser.newPage(); await page.goto(url_baseStats); /
async function getLinks(){
const first = 'first';
const last = 'last';
const browser = await browserControl.startBrowser();
const page = await browser.newPage();
await page.goto(url_baseStats);
// await page.waitForNavigation();
let links = await page.evaluate((first, last) => {
try {
let links = Array.from(document.querySelectorAll('a'), a => a.getAttribute('href'));
links = links.slice(links.indexOf(first), links.indexOf(last));
return links;
} catch(err) {
throw err;
}
});
console.log("links:", links);
return links;
}
我有两个问题:
提前感谢;41;仅供以后的观众参考,评论摘要: 在page.evaluate()函数中运行的所有操作都是在浏览器页面的上下文中完成的。脚本是在浏览器中运行的,而不是在node.js中。因此,一些常见的js规则在这里无效。 例如:
)是时候进行更多的调试了:让你的函数在捕获后也返回一个值,这样你就可以检查它是否真的立即出错了。至于为什么你需要传递第一个和最后一个:,除非你想从“不在浏览器中运行”中得到值要将上下文传递到浏览器上下文中,则需要执行此操作。在这种情况下,您似乎忘记设置
evaluate(…,first,last)
,以便将这两个值加入到函数中。显然(根据文档)page.evaluate()
仅在函数回调返回承诺时才会等待。(文档不是很清楚。)我不知道为什么也有first
和last
;.evaluate()
回调函数的参数应该在.evaluate()中的回调函数之后传递
调用自身。它们为什么在那里?您希望它们有什么值?编辑哦,等等;是的,从回调函数中取出参数first,last
。事实上,它们将未定义,因此回调不会像您期望的那样工作。然后您必须将first
和last
作为第二个和第三个参数传递.evaluate()
调用的d个参数。(并将参数放回原位。)函数作为文本从节点域传输到浏览器域,因此正常的作用域规则没有意义。