グローバル変数に空の配列を代入しますartistURLs
。次に、文字列 (ローカル変数artistURL
) をartistURLs
Cheerio.each()
イテレーター メソッドで配列にプッシュします。
var request = require('request'),
cheerio = require('cheerio'),
url = 'http://www.primarytalent.com/',
artistURLs = [];
request(url, function(err, resp, body){
if(err)
throw err;
$ = cheerio.load(body);
$('#rosterlists div li a').each(function(){
var urlCap = this.attr('href').slice(1);
var artistURL = url.concat(urlCap);
artistURLs.push(artistURL);
});
console.log(artistURLs);
});
私はそれartistURL
が正常にプッシュされているartistURLs
ことを知っています
console.log(artistURLs);
端末に入力された配列が表示されます。問題はconsole.log(artistURLs);
、グローバル スコープでコールバック関数の外で実行しようとした場合です。例えば
var request = require('request'),
cheerio = require('cheerio'),
url = 'http://www.primarytalent.com/',
artistURLs = [];
request(url, function(err, resp, body){
if(err)
throw err;
$ = cheerio.load(body);
$('#rosterlists div li a').each(function(){
var urlCap = this.attr('href').slice(1);
var artistURL = url.concat(urlCap);
artistURLs.push(artistURL);
});
});
console.log(artistURLs);
console.log(artistURLs);
の外に移動したことがわかりますrequest()
。何らかの理由artistURLs
で、グローバル スコープでアクセスしようとすると、`request()~ で発生したすべての処理がまったく発生しなかったかのように、空の配列が返されます。
なぜこれが起こっているのですか?artistURLs
また、プッシュされているすべての URL が.artistURLs
ありがとう