2016-08-14 1 views
0

私は比較的新しいjavascript開発者です。私は追跡できないような問題に悩まされています。間違った場所を探している。スコープ/クロージャーとは関係があるようですが、動作させることができないようです。ここに行く:Nodejs&Request&Cheerio:要求内からグローバル配列に追加できない

私はarrという名前のグローバルスコープの配列を持っています。 node.js、request、cheerioを使用してウェブサイトにアクセスし、情報を取得しています。この図では、すべてのリンクのhref属性はhttp://www.google.comです。私はそれらをグローバルスコープの配列に挿入します。しかし、 '要求'の外側では、配列はまだ空のようです。

var request = require('request'); 
var cheerio = require('cheerio'); 
var arr = [] 
var url = 'http://www.google.com'; 

request(url, function(err, resp, body) { 
    var $ = cheerio.load(body); 
    $('a').each(function(i, link){ 
    arr.push(link['attribs']['href']); 
    }); 
}); 

console.log(arr); // prints nothing 

は、私は、これは私が見下ろす午前誰かが助けることができるなら、私は、私はそれを大幅にいただければ幸いです正確に理由をいくつかの光を当てることは非常にシンプルで最も可能性の高いものだということを知っています。ありがとうございました。

答えて

0

実際にはarrが入力されています。ただし、要求の呼び出しが完了する前にconsole.log(arr)というステートメントが実行されます。これは、ノンブロッキング属性がnode.jsであるためです。 link['attribs']['href']をループ内に記録すると、最初にarrが空の配列[]として印刷され、ループ内の値が後で印刷されることがわかります。

関連する問題