2016-09-07 14 views
0

arrデータがjson関数内でのみ使用できるのはなぜですか?最初のconsole.logがデータを返します.2番目の配列は空の配列ですか?私は最初の呼び出しを終了する必要がありますか何とか動的配列にコピーしますか?d3.jsonでグローバル配列が更新されない

var inputURL; 
    var start = "2016-09-01"; 
    var end = "2016-09-06"; 
    var arr = []; 
    var stock = ["AZN.L", "GOOGL", "AAPL"]; 

    var arrayLength = stock.length; 
    for (var i = 0; i < arrayLength; i++) { 
     itern(stock[i]); 
    }; 


    function itern (stock) { 

    inputURL = "http://query.yahooapis.com/v1/public/yql" + 
     "?q=select%20*%20from%20yahoo.finance.historicaldata%20" + 
     "where%20symbol%20%3D%20%22" 
     + stock + "%22%20and%20startDate%20%3D%20%22" 
     + start + "%22%20and%20endDate%20%3D%20%22" 
     + end + "%22&format=json&env=store%3A%2F%2F" 
     + "datatables.org%2Falltableswithkeys"; 


    // Get the data 
    d3.json(inputURL, function (error, data) { 

     data.query.results.quote.forEach(function (d) { 
      d.date = parseDate(d.Date); 
      // console.log(d.date); 
      d.high = +d.High; 
      d.low = +d.Low; 
      arr.push({ 
       company: stock, 
       date: d.date, 
       high: d.high, 
       low: d.low, 
       sortable: true, 
       resizeable: true 
      }); 
     }); 

     console.log(arr); //returns arr with data 

    }); 
     console.log(arr); // returns arr[] 
    }; 

答えて

0

d3.jsonは、非同期関数であるので、arrは、コールバックが実行された後にのみ移入されるであろう。 arrは、以下のようなコールバックに移入された後、あなたは多分機能を呼び出すことができます。このことから

var dataAvailable = function() { 
     console.log(arr); 
    }; 

    d3.json(inputURL, function (error, data) { 

     data.query.results.quote.forEach(function (d) { 
      d.date = parseDate(d.Date); 
      // console.log(d.date); 
      d.high = +d.High; 
      d.low = +d.Low; 
      arr.push({ 
       company: stock, 
       date: d.date, 
       high: d.high, 
       low: d.low, 
       sortable: true, 
       resizeable: true 
      }); 
     }); 
     dataAvailable() 
//  console.log(arr); //returns arr with data 

    }); 
+0

結果が最初にconsole.log、まだデータがありませんグローバル配列と同じです。各反復後にデータを外部のデータベースに取り込むことはできますか? – user3359706

+0

答えは、在庫配列が完全に消費されたときに実行するコードをd3.json関数の中に追加することと実際には違いはありません。私はデータをグローバルにアクセス可能な配列にすることを目指していました。私はWebサービスを使ってやり直します。ありがとうございました – user3359706

関連する問題