Я могу получить список с помощью метода get axios.get. тогда я могу использовать setState, и он работает безупречно. но возврат не соответствует действительности, он возвращает undefined console.info(result) => undefined . Как я могу проверить, работает ли setState нормально, возвращает true или возвращает false?
getList = async () => {
await axios.get("http://localhost:5000/list").then((response) => {
this.setState(
{
copy: response.data.list,
},
() => {
return true;
},
);
});
};
componentDidMount = () => {
this.getList().then((result) => {
console.info(result);
});
};
setState
возвращаемое значение не имеет значения. setState
всегда работает (если что-то не сильно сломалось).
@dwjohnston Я не получаю никаких ошибок, просто console.info не определен.
@zafer это имеет смысл. Вы ничего не возвращаете от своей функции getList
getList
ничего не возвращает, как и финальное then
в цепочке обещаний axios
@dwjohnston хорошо, как я могу проверить, пришел ли запрос в список или нет?
Второй аргумент для установки состояния может return true
, но он никуда не денется. Нужно как-то его использовать, например:
const response = await axios.get("http://localhost:5000/list")
return new Promise((resolve) => {
this.setState({
copy : response.data.list
}, () => {
resolve(true);
})
})
теперь цепочка будет работать, потому что вы разрешаете цепочку промисов с помощью true
вместо того, чтобы возвращать ее из функции обратного вызова
Ваше утверждение return true
находится в обратном вызове setState
после установки. Он не будет распространяться на промис, возвращенный из getList
; действительно, вы ничего не возвращаете из этой функции (вы даже не возвращаете обещание Axios; если вы вернете его, вы получите ответ, зарегистрированный в вашем console.info
, но он будет зарегистрирован до завершения обратного вызова setState
), поэтому вы получаете undefined
в console.info
.
Если вам нужно getList
вернуть промис, который разрешается в true
после установки состояния, вам понадобится
getList = () => {
return new Promise((resolve) =>
axios.get("http://localhost:5000/list").then((response) =>
this.setState(
{
copy: response.data.list,
},
() => resolve(true),
),
),
);
};
componentDidMount = () => {
this.getList().then((result) => {
console.info(result);
});
};
Какое именно сообщение об ошибке вы получаете? Вы вызываете
this.getlist
, ноgetLIst
— это асинхронная функция, но она ничего не возвращает. Я ожидаю, что результатawait this.getList()
будетundefined