2016-05-05 5 views
1

私angularjsコードが実行していない:それは私に起こるようangularjsは順次、次のように

 holidays = new Array(); 
    var deferred = $q.defer(); 
     servicePOST.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{ 
      "date":d 
     }).then(function(result) { 

      $scope.holidays = result; 

     alert(holidays.length); 
      deferred.resolve(result); 
     }); 
     return deferred; 


    alert("holiday length after service post"+holidays.length); 

angularjsがシーケンシャルされていません。このコードは最終的に実行されます!このコードは私のangularjsコントローラーの中にこのような順序で挿入され、下のコードはこの 'holidays'配列に依存します。上記のコードでは、サービスpost0の後の休日の長さが最初にポップアップし、サービスのポストが最後に実行されるよりも、アラートが実際に表示されます。

私は上記のように$ q、promises、defferedを使用しようとしましたが、work.iは$ qを私のangularjsコントローラにのみ注入しました。 上記のコードで何か間違っていますか?助けてください!

答えて

0

約束は別の約束を返します。したがって、この第2約束を使用して、希望の順序でロジックを実行させることができます。あなたは$ qサービスを使ってこの状況のことも複雑にしています。

holidays = new Array(); 

var promise = servicePOST.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{ 
    "date":d 
}).then(function(result) { 
    $scope.holidays = result; 
    alert(holidays.length); 
    return result; 
}); 

promise.then(function(result) { 
    alert("holiday length after service post"+holidays.length); 
}); 
+0

ありがとうtylerwal!私のためにそのワーカー! –

0

コードは順番に実行されますが、要求が解決するまでに時間がかかりますが、アラートの前に開始されます。最初にリクエストを処理してから、「then」の中に結果を警告する必要があります。

+0

これはまさに私が起こりたくないことです。私は要求が解決され、下のコードが実行されるまで待ちたいと思っています......今はどうしたらいいですか?私はすでに$ qを試しています(または、$ qの間違った実装をして、戻り値をどこに置くかを混乱させることを約束します)。 –

+0

最後の警告を削除します。要求と同時に実行されます。解決の後に置く –

+0

あなたは$ q.defer()の代わりに$ httpを使うことができます... $ http.post(url、data).then(応答){ $ scope.holidays = response.data ; console.log($ scope.holidays); } –