2017-03-25 35 views
2

我想使用一個在網上找到的庫,名爲himalaya,它是一個html解析器。 https://github.com/andrejewski/himalayaJavascript需要返回空對象

我跟着他們上導入庫指南,所以我做

var himalaya = require('himalaya'); 

然而,當我調用它的成員函數,我得到一個錯誤

TypeError: himalaya.parse is not a function 

我試圖執行喜馬拉雅.parse()直接在Web瀏覽器控制檯上運行。我嘗試在js文件中註釋require語句,該功能不再適用於Web瀏覽器。

我想這意味着要求聲明的作品?但由於某些原因,我不能在我的JavaScript文件中使用它,只能在瀏覽器控制檯上使用它。

也許有文件範圍的東西?這是我的代碼的一部分。

var himalaya = require('himalaya'); 

Template.main.onCreated(function() { 
    var http = new HttpGet("www.someurl.com/", "/somedirectories/", function (response) { 
     console.log(himalaya.parse(response.content)); 
    }); 
    http.sendRequest(); 
}); 

我確定response.content確實包含有效的html字符串。

回答

0

當您在main.onCreated函數中調用himalaya.parse時,似乎此庫並未完成加載。這就是爲什麼它只能在您的瀏覽器控制檯中運行。檢查喜馬拉雅圖書館是否具有onReady函數,以便您確切知道何時可以使用它。如果沒有,你可以:

a)召喚main.onRendered

B的內部的解析函數)保持解析調用的main.onCreated內,並設置超時半秒這樣以後調用它:

var himalaya = require('himalaya'); 

    Template.main.onCreated(function() { 
     var http = new HttpGet("www.someurl.com/", "/somedirectories/", function (response) { 
      setTimeout(function(){himalaya.parse(response.content)},500); 
     }); 
     http.sendRequest(); 
    }); 

如果您有與問題的setTimeout檢查這個答案: Meteor.setTimeout function doesn't work

+0

我仍然有同樣的錯誤。我想我沒有正確導入庫? –

+0

如果命令在瀏覽器控制檯中運行良好,請嘗試以下操作:將調試器放在代碼中的parse()行之前。當調試器暫停處理時,在控制檯中運行parse命令,那麼在控制檯中應該有相同的問題。這可以確認問題是由於異步處理。 – Ruben

+0

我發現了一些奇怪的東西。在服務器控制檯上,我發現喜馬拉雅未定義。我認爲由於導入不良,圖書館只能在客戶端使用? –