2017-11-14 11 views
-1

バックエンドからデータを取るという約束を書いています。しかし、関数end()は私の変数の魔法使いがこのデータを含んでいるのを見ません。私が間違ってやっていること、overlappingProjects変数を返す方法は?私の変数がAngularJSの約束の範囲内で利用できないのはなぜですか?

Console.log(1と2)は大量のデータを示しますが、console.log(4)にはすでに空のオブジェクトがあります。

this.checkSingleInvitation = function(invitation) { 
    console.log('Оверлап сингл'); 
    var dtoArray = []; 
    var overlappingProjects = {}; 

    InvitationService.acceptedProjects.models.forEach(function(accepted) { 
     if(!(dateHelper.parseDate(accepted.dt_from) > dateHelper.parseDate(invitation.dt_to) || dateHelper.parseDate(accepted.dt_to) < dateHelper.parseDate(invitation.dt_from))) { 
      var dto = { 
       target: invitation.project_has_musicians_id, 
       goal: accepted.project_id 
      }; 
      dtoArray.push(dto); 
     } 
    }); 

    var promises = []; 
    angular.forEach(dtoArray, (function(dto) { 
     var deferred = $q.defer(); 
     var overlappingProjects = {}; 
     //async fun 
     InvitationService.checkOverlapping(dto) 
      .before(function() { 
       progressBars.progressbar.requestsInProgress++; 
      }) 
      .success(function(data) { 
       // TODO: overlappingProjects - ??? 
       if(Object.keys(data).length) { 
        console.log('1'); 
        console.log(data); 
        overlappingProjects = data; 
        console.log(overlappingProjects); 
       } 
       console.log('2'); 
       console.log(data); 
       deferred.resolve(data); 
      }) 
      .error(function(error) { 
       deferred.reject(error); 
      }) 
      .finally(function() { 
       progressBars.progressbar.requestsInProgress--; 
      }); 
     promises.push(deferred.promise); 
    })); 
    $q.all(promises).then(console.log(promises)).then(
     end() 
    ); 

    function end() { 
     console.log('4'); 
     console.log(overlappingProjects); 
     return overlappingProjects; 
    } 
} 
+0

あなたは 'Invitatio nService.checkOverlapping(dto) 'を約束配列に追加します。そして、それが「すべて」で解決するのを待つ – yBrodsky

答えて

0
overlappingProjects)宣言は、あなたが二回変数 end関数を呼び出すのではなく、ただちにコールバックとして渡すに加えて

$q.all(promises).then(console.log(promises)).then(
    end() 
); 

は次のようになります。

2番目の定義を削除します
$q.all(promises) 
    .then(() => console.log(promises)) // may be .then(results => console.log(results)) ? 
    .then(end); 
1

問題は、overlappingProjectsを2回定義しているようです。

angular.forEach(dtoArray, (function(dto) { 
     var deferred = $q.defer(); 
     var overlappingProjects = {}; // <-- remove this line 
関連する問題