2016-03-10 2 views
0

Я пишу угловой сервис, который я буду использовать для получения и обработки данных из списков/библиотек SharePoint. Я пытаюсь использовать лучшие практики для обещаний $ http, но у меня возникают проблемы с поиском наилучшего способа выполнить то, что я хочу. Вот одна из моих функций в моей службы:

this.GetListItemById = function (webUrl, listName, itemId, loading) { 
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")"; 

    return $http({ 
     url: url, 
     method: 'GET', 
     processData: false, 
     headers: { "Accept": "application/json;odata=verbose" }, 
    }).then(function SuccessCB(response) { 
     return response.data.d; 
    }).catch(function FailureCB(response) { 
     throw response; 
    }); 
}; 

И тогда здесь, где я использую его в мой контроллер:

$scope.GetListItemById = function (webUrl, listName, itemId) { 
    SPListUtility.GetListItemById(webUrl, listName, itemId) 
     .then(function success(data) { 
      console.log(JSON.stringify(data)); 
      $scope.animateAlert("myAlert", "alertText", "Item: " + data.Title + " loaded", "success"); 
     }).catch(function failure(error) { 
      console.log("Error " + error.status + ": " + error.statusText); 
      $scope.animateAlert("myAlert", "alertText", "Error " + error.status + ": " + error.statusText, "danger"); 
     }); 
}; 

Это работает, как задумано, он возвращает элемент данных, если он найденный на сервере, и если это не тогда 404 пузырьков до моего контроллера, и мое предупреждение об ошибке вызывается и регистрируется на консоли. Моя проблема с этим, хотя он держит пузырек вверх и угловые уловы заявление споткнулось, который приводит к следующему в журнале: Console log image

Есть ли способ, чтобы остановить Угловые от выдува журнала? Также я следую лучшим практикам здесь? Если нет, то что я должен изменить?

ответ

1

Когда вы throw внутри блока catch, он не просто отвергает обещание. Он также запускает угловой exception handler, который по умолчанию будет регистрировать исключение (вы можете заменить стандартную реализацию этого, если хотите). Если вы хотите отклонить обещание от блока отклонения без запуска обработчика исключений, вы можете вернуть отклоненное обещание. например

return $q.reject(response);

Это сказанное ваш улов блок, который throw ИНГ ответ не является необходимым. Точно такое же поведение произойдет, если вы просто удалите его (кроме журнала)