Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
Cómo obtener datos de MySQL después de que se complete POST

Cuando el usuario hace clic en un botón, quiero que la aplicación

  • leer texto de un campo de entrada
  • publíquelo en MySQL para agregarlo como una nueva fila
  • extraiga todas las filas de MySQL (incluida la nueva fila)
  • actualice el estado del componente de reacción con los nuevos datos que acaba de extraer
  • y volver a mostrar una lista de todos esos datos para el usuario

El problema que veo es que bajar todas las filas no incluye la que se acaba de publicar a menos que incluya un retraso manual (a través de setTimeout).

Así es como se ven mis 2 funciones

 // gets all data, updates state, thus triggering react to rerender listWords() { setTimeout(() => fetch("http://localhost:9000/listWords") .then(res => res.text()) .then(res => this.setState({ wordList: JSON.parse(res)})), 2000) } // sends new word to the MySQL database, then kicks off the listWords process to refetch all data addWord() { fetch("http://localhost:9000/addWord", { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ word: this.state.newWord }) }) .then(res => res.json()) .then(this.listWords()) }

No debería tener que tener ese setTimeout allí, pero cuando lo elimino, la actualización de listWords no tiene la fila recién publicada.

Mi mejor conjetura es que tampoco

  1. Estoy estropeando el paradigma de promesa .then() , o
  2. MySQL responde a mi solicitud POST, pero en realidad no agrega la fila hasta que GET ya se ha completado, por lo que se pierde la nueva fila.

¿Cómo puedo asegurarme de que la POST se haya completado con éxito antes de volver a extraer las filas?

Estoy usando reaccionar, expresar, secuenciar, y para la base de datos es MySQL en un contenedor acoplable.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

De hecho, cometiste un error, una trampa común en la que yo también caí varias veces :)

Al llamar a addWord() , evaluará then(this.listWords()) . Esto llamará inmediatamente a listWords() .

En su lugar, pasa una función a then(...) (en lugar de llamar a una función), por ejemplo, así:

 .then(() => this.listWords())

o incluso así:

 .then(this.listWords)

Ahora, en lugar de pasar el resultado de listWords() a then() , pasará una función que llamará a listWords() a then() , por lo que solo ejecutará listWords() cuando la Promesa alcance este then()


Ejemplo para hacer este comportamiento aún más claro:

Al llamar a una función function foo(arg1) {} , JS necesita saber el valor de arg1 antes de llamar a foo . Tomemos el siguiente fragmento de código:

 foo(bar())

En este caso, se debe llamar a bar() antes que a foo(...) porque arg1 será el valor devuelto por bar() . En contraste con el siguiente caso:

 foo(() => bar())

Ahora, arg1 será una función en lugar del valor devuelto por bar() . Esto es equivalente a:

 var arg = () => bar(); foo(arg);

En contraste con:

 var arg = bar(); foo(arg);

Donde es obvio lo que va a pasar.

En funciones encadenadas como foo(arg1).bar(arg2).baz(arg3) , todos los argumentos se evaluarán antes de llamar a foo(...) .


Alguna ayuda para depurar tales problemas: Use el Inspector de red en su navegador. Mostrará el orden de las solicitudes realizadas y, en este ejemplo, habrá visto que la solicitud GET se realizó antes que la solicitud POST . Es posible que esto no explique por qué sucede, pero puede comprender el problema más rápido.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda