2017-03-12 47 views
1

我正在嘗試瀏覽在線詞典的頁面。這裏是我的代碼:內部函數不知道外部作用域中定義的變量。爲什麼?

var Nightmare = require('nightmare'); 
var nightmare = Nightmare({ show: true }); 

var links = []; 
function goToLink(linkName){ 
    nightmare 
     .goto(linkName) 
     .evaluate(() => { 
      var href = document.querySelector("span.next a").href; 
      links.push(href) 
      return href; 
     }) 
     .then((href) => { 
      goToLink(href); 
     }) 
     .catch((error) => { 
      console.error('Error:', error); 
     }); 
} 

goToLink("http://lexicon.quranic-research.net/data/01_a/000_!.html"); 

我得到Error: links is not defined。鏈接明確定義在var links = [];但內部函數不知道它。這裏發生了什麼?

+3

我可以想象,「評估」將參數串聯起來,並在不同的環境中進行處理。編輯:見https://github.com/segmentio/nightmare/issues/89 –

+0

你知道了Felix。我如何接受評論作爲答案? –

+0

@FelixKling請添加評論作爲迴應。 – caisah

回答

1

問題是evaluate回調在不同的上下文中調用,並且看不到links。什麼,你可以嘗試做的是通過這樣的:

(...) 
.evaluate(links => { 
    var href = document.querySelector("span.next a").href; 
    links.push(href) 
    return href; 
}, links) 
(...) 

links是回調的參數。您必須將其作爲evaluate函數中的第二個參數傳遞。

+0

啊,你可以通過一個論點。涼。 –

相關問題