我试图将scrape-it用作我今天早些时候从NPM下载的依赖项。我能够获得我想要的内容,但需要将结果存储在变量中,而不是通过回调处理它们。
使用'样本'来自scrape-it docs,当我尝试以下内容时:
var myVar = scrapeIt("http://ionicabizau.net", {
title: ".header h1"
, desc: ".header h2"
, avatar: {
selector: ".header img"
, attr: "src"
}
}).then(page => {
return page;
});
console.log(myVar);
我得到了结果:承诺{< pending> }
我也试过使用' await'在调用scrapeIt()函数之前,但是当我在本地执行此操作时,会出现意外的标识符'返回时出现语法错误。
请注意,当我在RunKit + npm网站上尝试此操作时,它确实可以在那里工作,但它在本地并不适合我。我已经卸载并重新安装了软件包,似乎我拥有所有必要的依赖项,所以不确定我做错了什么。 : - \
虽然这显然触及了javascript的异步性质,但问题的焦点是更好地理解与promises的交互。
答案 0 :(得分:1)
由于请求模块的异步特性,scrapeIt
方法是异步的。
scrapeIt.scrapeHTML
是同步的,但它希望将HTML作为字符串。
所以,只要你能从某个地方获取HTML,就可以做一些与你所做的非常相似的事情:
var myVar = scrapeIt.scrapeHTML("<h1>Hello</h1>", {
title: "h1"
});
console.log(myVar);
// { title: "h1" }
你可以把某些东西视为你必须等待的东西(例如下载页面的HTML - 需要时间)。这就是为什么有回调和承诺等等。
scrapeIt("http://ionicabizau.net", {
title: ".header h1"
, desc: ".header h2"
, avatar: {
selector: ".header img"
, attr: "src"
}
}).then(myVar => {
// Use myVar, only once it's ready
// Once the page is downloaded and parsed
// this function is triggered
console.log(myVar)
// Here you can do something with myVar
});
// At this point the page is not downloaded yet.