Цепочка обещаний не работает должным образом

Я пытаюсь использовать цепочку обещаний для вызовов $http.get, которые я делаю из своего углового приложения.

$http.get(url, config)
    .then(newViewRequest)
    .then(function (response) { // success async
        $scope.viewRequest1.data = response.data;
    }

И в моем newViewRequest я делаю новый вызов другой конечной точке, и мне нужно отправить ответ только в том случае, если вызов в newViewRequest успешен. Ниже то, что я пытаюсь

var newViewRequest = function (response) {
    var url1 = $rootScope.BaseURL;
    var config = {
        headers: {
            'Authorization': `Basic ${$scope.key}`,
            'Prefer': 'odata.maxpagesize=2000'
        }
    }; 

    var newresponse = $http.get(url1, config);
    if (newresponse.status = 200)
        return newresponse;
    else return response;
};

Но он всегда отправляет ответ на запрос без проверки статуса или чего-либо еще. Как я могу подойти к этому.


person trx    schedule 25.07.2019    source источник


Ответы (1)


$http.get в newViewRequest возвращает обещание. Вам нужно дождаться его разрешения, чтобы получить статус. И вы должны вернуть Обещание от newViewRequest, чтобы сделать правильную цепочку.

return $http.get(url1, config)
.then(newresponse => {
  if (newresponse.status = 200)
    return newresponse;
  else return response;
})
.catch(err => {
  return response;
})

person t.niese    schedule 25.07.2019
comment
Я до сих пор не могу вернуть response, если вызов не удался - person trx; 25.07.2019
comment
@trx вам нужно поймать случай, когда он завершается с ошибкой. Я обновил ответ соответственно. - person t.niese; 25.07.2019