Angular 2. Выполните вызов службы, чтобы дождаться, пока API вернет данные - PullRequest
0 голосов
/ 18 июня 2019

Угловой сервисный вызов, как показано ниже,

SearchAssets(searchAssetsModel: SearchAssetsModel): Observable<any> {
    return this.httpClient.post<any>(this.webApiUrl + "SearchAssets/SearchAssets/", searchAssetsModel);
}

и в моем компоненте я подписываюсь на услугу, как показано ниже,

this.searchAssetsService.SearchAssets(searchAssetsModel).subscribe(
  (data) => {}
)

Конечно, API вернет данные через 2-3 минуты после вызова службы, но теперь проблема заключается в том, что служба Angular не ждет, пока API вернет данные. Он выдаст 500 сообщений об ошибках после ожидания в течение 1,5 минут.

Ответы [ 4 ]

0 голосов
/ 18 июня 2019

Ваше высказывание ниже неверно.

... проблема в том, что служба Angular не ждет, пока API вернет данные.Он выдаст 500 ошибок после ожидания в течение 1,5 минут.

500 ошибка - внутренняя ошибка со стороны вашего сервера, то есть ошибка на вашей стороне сервера.может быть проблема с кодированием, или, возможно, ваш API возвращает ошибку в длинном сеансе.

Angular Http служба не имеет ничего общего с вашей ошибкой 500.Вы можете проверить это с помощью другого клиента, чтобы проверить результат API (что-то вроде Postman).

В любом случае, как только вы исправите свою сторону сервера, проблема исчезнет.

ПроверьтеИз этой ссылки developer.mozilla.org для более подробной информации об ошибке 500.Ниже приведен текст этой ссылки:

Код ответа сервера об ошибке «Внутренняя ошибка сервера HTTP» (HTTP) 500 означает, что сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос.

0 голосов
/ 18 июня 2019

Вы можете попробовать использовать обещание и выполнить свой код асинхронно, например:

async SearchAssets(searchAssetsModel: SearchAssetsModel: Promise<any> {
  await return this.httpClient.post<any>(this.webApiUrl+"SearchAssets/SearchAssets/", searchAssetsModel).
  toPromise();
}
0 голосов
/ 18 июня 2019

Попробуйте установить время ожидания для HTTP-запроса: https://stackoverflow.com/a/52188748/6603599

Кроме того, ожидание 2-3 минуты для запроса API не в порядке.Вы можете попытаться получить данные в виде потока, чтобы обновить пользовательский интерфейс для каждого нового элемента, добавляемого в поток.

0 голосов
/ 18 июня 2019

Вы можете использовать async и await , чтобы заставить сервисный вызов ждать.

...