#javascript #node.js #reactjs #axios
Вопрос:
Я создаю веб-сайт на Javascript, и у меня есть эта проблема:
Я хочу сделать что-то подобное.
Первая функция вызывает сервер X.
Вторая функция также вызывает сервер X, но только после того, как первая будет полностью завершена.
func2afterFunc1 = async () => {
await func1Open();
await func2Use();
}
export const func1Open = () => (dispatch) => {
axios
.post('/callToFunc1', "")
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
};
//basically call to this function to signup
exports.callToFunc1 = (req, res) => {
serverX
.open()
.then((data) => {
console.log(data)
return res.status(201).json("wasOpen");
})
.catch((err) => {
console.error(err);
return res.status(500).json("error");
});
};
export const func2Use = (user) => {
return async (dispatch) => {
serverX
.useAfterOpened()
.then((data) => {
console.log(data);
})
.catch((err) => {
console.error(err);
});
}
}
Комментарии:
1. func1Open возвращает пустоту, а не обещание, поэтому ожидание этого ничего не делает
2. Спасибо за помощь, когда я могу это сделать, если у меня нет обещаний, но мне нужна синхронизация?
3. Ты не можешь. Если у вас асинхронный код, единственный способ, чтобы что-то произошло после завершения асинхронного кода, — это обратный вызов, который именно так моделирует Обещание. Но у вас должно быть обещание, потому что axios.post возвращает обещание. Вы даже используете .then(), который возвращает еще одно обещание. Просто добавьте возврат
axios.post
передfunc1Open
вводом .4. Также имейте в виду, что
.then
на обещание ведет себя аналогично.map
массиву, где значение преобразуется на основе возврата функции обратного вызова. Поэтому , когда вы.then((res) => console.log(res))
, вы на самом деле преобразуете обещание вернуться неопределенным. Однако вы не используете значение в своем ожидании, так что это не имеет большого значения.5. Большое спасибо, теперь это, наверное, работает, я исправил, как вы мне сказали.