2016-02-06 38 views
1

我正在寫在Node.js的Twitter的殭屍,但我有一個使用名爲「scrapejs」的NPM庫中的函數它抓住從雅虎財經數據和工作得很好,問題是,雖然我以後的功能加載來自botton的代碼首先運行,而不是爲什麼。我有我的推特部分的機器人工作之前,但如果我從網絡抓取數據刮我不能在推文後運行。爲什麼這個功能在Node.JS中不會首先加載?

下面的代碼:

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

回答

0

Node.js的異步工作,這意味着在你的代碼行開始一前一後,和它們中的每一個在它結束時結束 - 第三行不會等待第二個在開始之前完成。

因爲你的第二個功能是沉重的,它需要一些時間來運行,不是一個簡單的console.log()得多了,那裏的最後一行將結束第一

+0

我得到了它,爲了工作,現在用setTimeout函數現在,我會在一個更好的解決辦法工作,我整理出所有的其他工作後。謝謝! – CorgJR

+0

@CorgJR - 通常當你想在其他函數之後發生某些事情時,可以將它放在函數的回調函數中。超時的問題在於你在那裏使用了一些任意的時間 - 在某些情況下,你會等待太久,在其他時間可能不夠用 –

-2

爲了使您的生活更輕鬆,你可以使用deasync模塊。

https://github.com/abbr/deasync

  • 使用只要安裝它:npm i -s deasync

然後你可以將任何異步功能同步之一。

相關問題