Манипулировать асинхронным вызовом с угловым

0

У меня есть календарь, который отображает события от MongoDB. Каждый раз, когда пользователь нажимает на предыдущую или следующую кнопку, я выполняю асинхронный вызов, а затем меняю текущий массив дней и событий; но если пользователь нажимает на кнопку несколько раз, отображаются двойные результаты.

 $scope.next = function () {
     //reset array
    $scope.gridOptions.data=[];

    //date of week

    myService.dbAction(dt3,dt4).then(function (data) {

      check(data);
      $scope.gridOptions.data = $scope.setts;//update data
    }, function (error) {
      console.error('ERROR: ' + error);
    })
 }

Я хочу только события прошлой недели, как это сделать?

  • 0
    По-разному. Вы хотите запретить пользователю нажимать предыдущий / следующий, пока не вернутся результаты? Или вы хотите, чтобы они нажимали на кнопки так быстро, как они хотят, но сохраняли только последнюю информацию?
  • 0
    Я хочу отображать последнюю информацию

1 ответ

0

Быстрое исправление - добавить флаг fetchPending. Используйте его, чтобы избежать дублирования выборки.

$scope.next = function () {
    if ($scope.fetchPending) return;
    $scope.fetchPending = true;
    //reset array
    $scope.gridOptions.data=[];

    //date of week

    myService.dbAction(dt3,dt4).then(function (data) {

      check(data);
      $scope.gridOptions.data = $scope.setts;//update data

    }).catch ( function (error) {
       console.error('ERROR: ' + error);
    }).finally( function () {
       $scope.fetchPending = false;
    })
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню