为什么这个功能在Node.JS中没有首先加载?

时间:2016-02-06 21:09:25

标签: javascript node.js twitter bots

我正在Node.JS中写一个twitter机器人,但是我有一个函数正在使用名为“scrapejs”的npm库它从雅虎财务中抓取数据并且工作得很好,问题是虽然我有加载后的函数来自botton的代码首先运行,而不是为什么。我的机器人的推文部分之前有用,但是如果我从网页上抓取数据,我就不能在推文之后运行。

以下是代码:

console.log("The Bot Is Starting To Work.");

var sp = require('scrapejs').init({
    cc: 2, // up to 2 concurrent requests
    delay: 5 * 1 // delay .05 seconds before each request
});

sp.load('https://ca.finance.yahoo.com/q?s=CADUSD=X')
    .then(function ($, res) {
        //$.q("//h3[@class='r']/a").forEach(function(node){ //Adding the HTML Tags to filter the data
        console.log("Scraping The Web...");
        $.q("//span[@class='time_rtq_ticker']/span").forEach(function (node) {
            var res = {
                title: node.textContent //Always returns { title: 'NUMBER'} (When Working)
            }
            console.log(res);
            return res;
        })
    })
    .fail(function (err) {
        console.log(err);
    })


console.log("Why does this part load first??"); // This part comes first before the function above

下面是输出的内容:https://imgur.com/YJD2FUW

2 个答案:

答案 0 :(得分:0)

node.js异步工作,这意味着代码中的行一个接一个地开始,并且每个行在结束时结束 - 第三行不会等待第二个在开始之前完成。

由于你的第二个功能很重,运行需要一些时间,远远超过一个简单的console.log(),最后一行将首先结束

答案 1 :(得分:-2)

为了让您的生活更轻松,您可以使用deasync模块。

https://github.com/abbr/deasync

  • 只需使用以下代码安装:npm i -s deasync

然后您可以将任何异步功能转换为同步功能。