2016-11-13 9 views
0

jsonの2つのオブジェクトを連結し、anglejの$ scopeに割り当てます。しかし、同じことをすることができません。コードはmakeJson機能で上記のコードでAngularJSのスコープにjsonを追加する

//https://wind-bow.hyperdev.space/twitch-api/channels/ESL_SC2 

/*Global Variable*/ 
var responseData=[]; 
var responseDataValues=[]; 
var twitch = angular.module("twitch",[]); 

twitch.controller("listStremers",streamMe); 

function streamMe($scope,$http) 
{ 
    var streamers=["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas","comster404","brunofin"]; 

    for(var i=0;i<streamers.length;i++) 
    { 
     $http({ 
     method:"jsonp", 
     url:"https://wind-bow.hyperdev.space/twitch-api/streams/"+streamers[i], 
     params:{ 
      format: 'json', 
      callback: 'fitData' 
     } 
     }); 
     $http({ 
     method:"jsonp", 
     url:"https://wind-bow.hyperdev.space/twitch-api/channels/"+streamers[i], 
     params:{ 
      format: 'json', 
      callback: 'fitDataValues' 
     } 
     }); 
    } 
$scope.twitchData=makeJson(responseDataValues,responseData); 
    $scope.filStatus={}; 
    $scope.clear=function(){ 
    $scope.filStatus={}; 
    console.log($scope); 
    } 
} 

function fitData(response) 
    { 

    responseData.push(response); 
    } 
function fitDataValues(response) 
{ 
    console.log(response); 
    responseDataValues.push(response); 
} 

function makeJson(arr1,arr2) 
{ 

    for(var i=0;i<arr1.length;i++) 
    { 

     arr1[i].stream=arr2[2].stream; 
     if(arr1[i].stream==null&&arr1[i].status==404) 
     { 
     arr1[i].liveStatus="offline"; 
     } 
     else if(arr1[i].status==404) 
     { 
     arr1[i].liveStatus="dead"; 
     } 
     else 
     { 
     arr1[i].liveStatus="online"; 
     } 
     //console.log(arr1[i]); 
     //console.log(arr2[i]); 
    } 
    //console.log(arr1); 
    return arr1; 
} 

以下の通りである私は、新しいliveStatusを作成する必要がARR1 [i]のオブジェクトのプロパティをストリーミングし、それに値を割り当てるが、コードは、しかし、何の問題もなし値なしで実行取得しますarr1に割り当てられ、同じものがコントローラの$ scopeに割り当てられます。 AJとJavaScriptに新しいが、助けてくださいアム

答えて

0

あなたが連結されているデータは、あなたのデータは、HTTP呼び出して来る前に、非同期であるHTTP呼び出し、回線から来ているため、この問題がある

$scope.twitchData=makeJson(responseDataValues,responseData); 

両方の空の配列で実行されました。 あなたが約束レゾール、 によって、または単純な方法のいずれかで、あなたのコード内の メイク以下の変更を行うことができます:httpコールは、より多くの時間がかかる

function fitData(response) 
{ 
    responseData.push(response); 
    if(responseDataValues.length){ 
     $scope.twitchData=makeJson(responseDataValues,responseData); 
    } 
} 
function fitDataValues(response) 
{ 
    console.log(response); 
    responseDataValues.push(response); 
    if(responseData.length){ 
     $scope.twitchData=makeJson(responseDataValues,responseData); 
    } 
} 

を両方の配列は値を持つ関数呼び出しを呼び出します。

関連する問題