将scrape-it npm中的页面结果分配给变量返回Promise {<pending>}

时间:2017-07-05 18:49:52

标签: javascript npm promise

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

使用&#39;样本&#39;来自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);

我得到了结果:承诺{&lt; pending&gt; }

我也试过使用&#39; await&#39;在调用scrapeIt()函数之前,但是当我在本地执行此操作时,会出现意外的标识符&#39;返回时出现语法错误。

请注意,当我在RunKit + npm网站上尝试此操作时,它确实可以在那里工作,但它在本地并不适合我。我已经卸载并重新安装了软件包,似乎我拥有所有必要的依赖项,所以不确定我做错了什么。 : - \

虽然这显然触及了javascript的异步性质,但问题的焦点是更好地理解与promises的交互。

1 个答案:

答案 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.