Javascript 将scrape it npm的页面结果分配给变量将返回承诺{<;pending>;}

Javascript 将scrape it npm的页面结果分配给变量将返回承诺{<;pending>;},javascript,npm,promise,Javascript,Npm,Promise,我试图使用scrape作为依赖项,我今天早些时候从NPM下载了这个依赖项。我能够获得想要的内容,但需要将结果存储在变量中,而不是通过回调处理它们 使用scrape it文档中的“示例”,当我尝试以下操作时: var myVar = scrapeIt("http://ionicabizau.net", { title: ".header h1" , desc: ".header h2" , avatar: { selector: ".header img"

我试图使用scrape作为依赖项,我今天早些时候从NPM下载了这个依赖项。我能够获得想要的内容,但需要将结果存储在变量中,而不是通过回调处理它们

使用scrape it文档中的“示例”,当我尝试以下操作时:

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);
我得到的结果是:承诺{}

在调用scrapeIt()函数之前,我也尝试过使用'await',但当我在本地使用'Unexpected identifier'时,会出现语法错误

请注意,当我在RunKit+npm站点上尝试此功能时,它确实在那里起作用,但在本地对我不起作用。我已卸载并重新安装了该软件包,似乎我拥有所有必要的依赖项,因此不确定我做错了什么:-\


虽然这显然涉及到javascript的异步性质,但问题的焦点是更好地理解与承诺的交互。

由于请求模块的异步性质,
scrapeIt
方法是异步的

scrapeIt.scrapeHTML
是同步的,但它希望HTML是字符串

因此,只要您可以从某处获取HTML,您就可以执行与您所做的非常类似的操作:

var myVar = scrapeIt.scrapeHTML("<h1>Hello</h1>", {
    title: "h1"
});
console.log(myVar);
// { title: "h1" }

“我已经试过了”是指尝试使用
await
,因为否则
myVar
将是一个承诺,正如你所说的。可能是重复的,你试图在得到某个东西之前对它进行评估
myVar
是一个承诺,因此您应该在
then
func中使用调用的结果来完成工作。您可能认为应该在得到结果之前阻止当前函数的执行,但您没有这样做。只需分离剩余的逻辑,然后从
函数中调用它。是的,我开始看到了。我曾希望能够以某种方式将结果存储在变量中,但没有成功同时尝试在then函数中工作,看看我是否能找到我要找的内容。因此,除了可能自己从页面中提取正文内容,然后使用scrape it来提取我要找的信息之外,它是否可能使用标准的scrapeIt方法并以某种方式将结果存储在变量中?@ReubenV您确实使用
然后
方法将数据存储在变量中。但是你必须理解整个事情的异步本质。你为什么想让它马上出现?哦哦。。。我知道它现在在.then方法中是如何工作的。我很抱歉在这件事上说得太多了。我应该能够在内部很好地处理它。那么现在我了解了流程,就更好了。我很抱歉,因为我对承诺还比较陌生。你编辑的解释为我澄清了一切!
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.