Синхронность — вторая функция начинается раньше, первая функция заканчивается

#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. Большое спасибо, теперь это, наверное, работает, я исправил, как вы мне сказали.