2016-09-13 5 views
0

これは何度も尋ねられたと確信していますが、私はそれを見つけることができません。それはここの午後10時30分です。私はちょうどあなたたちと一緒にこのままにしておきます!anglejsでタイムアウトを呼び出す

本質的に、私はjsonサーバーメソッドを2回呼び出しました。データの更新と新しい合計の取得です。論理的には、更新データが最初に呼び出され、$ totを介して通知が送信され、新しい合計が取得されます。残念ながら、サーバーコントローラーにブレークポイントを設定すると、SetAlertReadの前にGetAlertTotalsが呼び出されるため、間違ったデータが返されます。

'合計' のコードは、別のコントローラであり、それゆえ$パブリッシュ/サブスクライブ/放出:

$scope.$on('RefreshUnreadItemsCounter', function() { 
    $scope.alertCount = $scope.GetAlertCount(); 
    $scope.alertTotals = $scope.GetAlertTotals(); 
    $scope.$apply(); 
}); 

のデータは、以下の(部分)の定義と、uiGridである:

$scope.gridOptions.onRegisterApi = function (gridApi) { 
    $scope.gridApi = gridApi; 
    $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.EDIT); 

    $scope.gridApi.selection.on.rowSelectionChanged($scope, function (row) { 
     var authorisationToken = $('input[name="__RequestVerificationToken"]').val(); 

     row.entity.AlertSeen = true; 
     $scope.message = row.entity.Message; 
     $http({ 
      url: '/Alerts/SetAlertRead', 
      contentType: "application/json; charset=utf-8", 
      method: 'POST', 
      data: { rowId: row.entity.UserAlertsId }, 
      headers: { '__RequestVerificationToken': authorisationToken } 
     }); 
     $scope.$emit('RefreshUnreadItemsCounter'); 
    }); 

ユーザーは行をクリックしてその行に関連付けられたデータを表示し、それを読み取り、jsonコール(/Alert/SetAlertRead)を介してデータ更新をトリガーします。私はjson呼び出しを実行する約束の時間を与えるために$ emit呼び出しの前にタイムアウトを設定すると仮定していますが、どうすればよいか分かりません。

助けてください!あなたが気にしないなら、できるだけ多くのコードを必要とします!再度、感謝します。

答えて

0

あなたは$ httpリクエストを解決または却下するチャンスを与えずに、すぐに$scope.$emit('RefreshUnreadItemsCounter');と電話します。 finally()を使用して両方のケースをカバーするか、then(successFunction, errorFunction)を使用して解決と拒否のケースを個別に処理できます。コードを変更してください:

$scope.gridOptions.onRegisterApi = function (gridApi) { 
$scope.gridApi = gridApi; 
$scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.EDIT); 

$scope.gridApi.selection.on.rowSelectionChanged($scope, function (row) { 
    var authorisationToken = $('input[name="__RequestVerificationToken"]').val(); 

    row.entity.AlertSeen = true; 
    $scope.message = row.entity.Message; 
    $http({ 
     url: '/Alerts/SetAlertRead', 
     contentType: "application/json; charset=utf-8", 
     method: 'POST', 
     data: { rowId: row.entity.UserAlertsId }, 
     headers: { '__RequestVerificationToken': authorisationToken } 
    }).then(function (response) { 
     $scope.$emit('RefreshUnreadItemsCounter'); 
    }, function (error) { 
     // case of rejected promise 
    }); 

}); 
+0

ありがとうございますAndriy - 完全な明快さで問題を修正しました。私は十分な質問をまだしていないので、あなたの答えをアップアップすることはできません...私は2年しか登録されていません... – Jerry

関連する問題