Nano Hash - криптовалюты, майнинг, программирование

Axios предотвращает выполнение других методов

У меня есть модальная форма, которую я хочу закрыть сразу после отправки. Форма работает отлично, и ввод данных из формы отражается в базе данных, но остальные действия в том же методе по какой-то причине не запускаются.

Я хочу, чтобы форма выполнялась при нажатии кнопки отправки:

1) измените loading на true через `setLoading (true)

2) опубликовать входные данные

3) закрыть модальное окно

В настоящее время 1) и 3) не выполняются. closeModal отлично работает, если я закомментирую axios.

Ниже приводится модальное:

const Form = ({ closeModal }) => {
    const [email, setEmail] = useState('')
    const [firstName, setFirstName] = useState('')
    const [lastName, setLastName] = useState('')
    const [loading, setLoading] = useState(false)

    const handleSubmit = async e => {
        setLoading(true)                
        e.preventDefault()    
        try {
            await axios.post(`${ROOT_URL}/createEmailList`, {
                email,
                firstName,
                lastName
            })
        } catch (err) {
            console.log(err)
        } finally {
            setLoading(false)
            closeModal()                        
        }
    }

    return (
        <form 
            className="form"
            onSubmit={handleSubmit}
        >
            <div className="label">Name *</div>
            <div className="desc">What is your name?</div> 
            <div className="input-container">
                <label className="label">
                    <input 
                        className="input" 
                        type="text" 
                        value={firstName} 
                        onChange={e => setFirstName(e.target.value)} 
                    />
                    <div className="desc">First Name</div>
                </label>
                <label className="label">
                    <input 
                        className="input"
                        type="text" 
                        value={lastName} 
                        onChange={e => setLastName(e.target.value)} 
                    />
                    <div className="desc">Last Name</div>
                </label>
            </div>
            <div className="label">Email Address *</div>
            <div className="input-container">
                <label className="label">
                    <input 
                        className="input2" 
                        type="email" 
                        value={email} 
                        onChange={e => setEmail(e.target.value)} 
                        required
                    />
                </label>
            </div>
            <button className="button">
                {loading ? "Loading..." : "Submit"}
            </button>
        </form>
    )
}

Кроме того, я использую функции Google (Firebase) в качестве серверной части.

Обновлять:

const handleSubmit = async e => {
    setLoading(true)                
    e.preventDefault()    
    try {
        await axios.post(`${ROOT_URL}/createEmailList`, {
            email,
            firstName,
            lastName
        })
    setLoading(false)
    closeModal() 
    } catch (err) {
        console.log(err)
    }
}

введите здесь описание изображения


  • я думаю, вы должны закрыть модель и загрузить false после получения ответа от axios, а не окончательно. потому что finally будет выполняться каждый раз, независимо от того, успешно это или нет. 31.10.2019
  • @ Вахид Ахтар, вы имели в виду то, как я обновился в посте? 31.10.2019
  • я говорю так: stackoverflow.com/a/58637660/6544460 31.10.2019

Ответы:


1

закрыть режим и сделать загрузку ложной в then() с ответом.

const handleSubmit = async e => {
      setLoading(true)                
      e.preventDefault()  
        await axios.post(`${ROOT_URL}/createEmailList`, {
            email,
            firstName,
            lastName
        })
       .then(res=> { 
         if(res.status===204 || res.status===200){
           setLoading(false)
           closeModal()
          } 
       })
       .catch(err=> console.log(err));
    }
31.10.2019
  • @Kevvv, с какой проблемой ты столкнулся? и проверьте вкладку сети во время публикации. дайте мне знать проблему 31.10.2019
  • @Ваш код состояния 204 означает отсутствие ответа после завершения запроса. 31.10.2019
  • по-видимому, это не проблема в соответствии с stackoverflow.com/questions/49931587/ 31.10.2019
  • @Kevvv, можешь ли ты ответить консолью в then() и проверить это. я думаю, возможно, вы не получаете код состояния от бэкэнда. 31.10.2019

  • 2

    Я думаю, что ваш finally выполняется до выполнения асинхронного вызова API.

    Возможно, вы могли бы связать вызовы axios для response и error как

     await axios
        .post(`${ROOT_URL}/createEmailList`, {
            email,
            firstName,
            lastName
        })
        .then(response => {
            /*
            You could close modal and set loading to false here
            */
        })
        .catch(err => {
            /*
            catch errors
            */
        });
    

    Это удалит зависимость для блока try-catch.

    31.10.2019
  • Хорошо, но с какой проблемой вы столкнулись? Выдает ошибку? 31.10.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..