Вы запускаете Async Call, чтобы получить данные API для отдыха.Асинхронный по определению означает, что вы не знаете, когда ваш код закончится.Это означает, что вам понадобится какой-то тип обратного вызова для запуска после завершения вашего apiCall.
Здесь у вас есть вызов API api, который возвращает объект обещания.Объект обещания - это в основном интерфейс для добавления обратных вызовов в асинхронный код.Я рекомендую использовать один из этих вариантов для запуска обратного вызова после вызова restApi.
1.) Вы можете передать функцию обратного вызова в restApi () в качестве второго параметра.Вы бы вызвали этот обратный вызов следующим образом:
let that = this;
apiCall(props, function(result) {
that.setState({apiData: result});
});
export function apiCall(props, callback) {
...
apigClient.invokeApi(params, pathTemplate, method, additionalParams)
.then(function(result){
...
callback(result);
...
});
...
}
2.) Другой вариант - обработать разрешение вашего apiCall, фиксируя обещание, которое создается вызовом api.Когда вы выполняете асинхронный код, вызов асинхронного метода немедленно возвращает объект обещания, который вы можете вернуть вызывающей функции, чтобы позволить вызывающей стороне присоединить обратные вызовы.это может показаться немного запутанным, я не лучший в объяснении вещей, но вижу следующее:
let that = this;
apiCall(props).then(function(result) {
that.setState({apiData: result});
});
export function apiCall(props) {
...
return apigClient.invokeApi(params, pathTemplate, method, additionalParams)
.then(function(result){
...
});
}
Ключевое отличие здесь в том, что вы возвращаете фактический асинхронный вызов apigClient.invokeApi.это позволяет любому, кто вызывает apiCall (), присоединять любые функции обратного вызова в методе .then ().
В конечном итоге вы хотите убедиться, что вызываете setState, когда данные restApi фактически возвращаются вызывающей стороне..then () - это самый простой способ вызвать этот вызов и надежно получить возвращенный результат.
Примечание: вы также должны посмотреть на обещания в JS, так как метод .then может принимать 2 параметра: одна функция, которая обрабатывает успешный возврат данных, и одна, которая обрабатывает отчеты об ошибках.