#javascript #reactjs
Вопрос:
Так. Я пытался исправить ошибку в своем веб-приложении. Когда отправляется запрос axios POST, данные сохраняются через несколько мгновений. Также я сузил это до причины, по которой API выдает «500 (внутренняя ошибка сервера)», но каким-то образом данные все равно обновляются (через несколько секунд).
Мой код до сих пор выглядит так:
changeStatus() {
const { match: { params } } = this.props;
let assigned = this.state.projres amp;amp; this.state.projres.assign
let fd = new FormData();
fd.append("projectId", params.pid);
fd.append("status", "Completed");
fd.append("assignedToId", assigned);
axios({
method: 'post',
url: `${url}/project/accepted`,
data: fd,
})
.then((response) => {console.log("here is the resp" fd)},(error) => {console.log("Error for it is" error)})
.then(this.props.actions.getDetails(params.pid)
).then(console.log("Here it all ends!"))}
В моей консоли данные, которые я получаю, находятся в последовательности, подобной
Here it all ends!
POST http://localhost:8000/project/accepted 500 (Internal Server Error)
here is the resp[object FormData]
Приведенный выше консольный ответ также кажется странным, поскольку он не делает .тогда() полезно.
Пожалуйста, помогите, в чем может быть возможная ошибка в коде? PS: Я много раз проверял другие API и форму данных post, все они правильные. Также пробовал в Почтальоне, там тоже неплохо работает.
Комментарии:
1.
.then(this.props.actions.getDetails(params.pid))
будет немедленно звонитьthis.props.actions.getDetails(params.pid)
вместо того, чтобы назначать его в качестве обратного вызова после того, как обещание будет выполнено. То же самое с.then(console.log("Here it all ends!"))
— значение регистрируется немедленно, и вы назначаете результатconsole.log
(который простоundefined
) в качестве.then()
обработчика. Который ничего не делает.2. Ладно, понял. Но как преодолеть эту проблему? Как я могу заставить
.then(this.props.actions.getDetails(params.pid))
ждать, пока данные не будут загружены? С условием «если» может быть?3.
.then(() => this.props.actions.getDetails(params.pid)
4. К сожалению, это не помогло! По-прежнему выдает ошибку «500»: (
5. Это ошибка сервера. Вы вряд ли повлияете на это, изменив код на стороне клиента. Особенно это невозможно, если вы измените обработчики на момент завершения запроса . Это не повлияет на запрос по определению.