Я пытаюсь найти форму, которая будет вызывать и возвращать вызов ajax, только если параметр содержит 6 или более символов.
В моем контроллере у меня есть простая функция.
function getByParam(param) {
if (param.length >= 6) {
return $http.get('https://example.com/endpoint/' + param);
} else {
return noItems();
}
}
Проблема заключается в возвращении обещания с пустым набором ответов. Независимо от того, что я, кажется, пытаюсь получить в результате ошибки.
myController.getByParam(param).success is not a function
В настоящее время у меня это как noItems()
.
function noItems() {
var promise = Promise(function(resolve, reject) {
if (true) {
resolve();
} else {
reject();
}
}).then(function(){
var emptyResponse = {success:true, response:{records:[]}}
return emptyResponse
});
return promise
}
Я видел ответы, связанные с $httpBackend
но это кажется излишним. Я также видел предложения с использованием $timeout
но опять же, я что-то упустил, чтобы заставить его работать.
Здесь я сделал пример, используя $ q вместо Promise (кажется немного более разборчивым код Ссылка на пример, также вы должны попытаться вернуть ошибку с сервера, если кто-то делает HTTP-запрос на ваш сервер без использования вашего приложения сбой, потому что вы выполняли проверки 6 символов.
Если сервер выполняет эту проверку, он должен вернуть сообщение об ошибке или что-то еще, поэтому вам не нужно делать эту логику на своей стороне клиента.
Я предполагаю, что сервер не делает этого и дает некоторые советы
spyOn('$http, 'get')
? $ httpBackend не является чрезмерным, но рекомендуемым способом HTTP-макетов в Angular.