Estaba revisando mi fuente de noticias de FB y me preguntaba después de ver el no. de me gusta de una de mis publicaciones como “indefinido”. ¿Qué tipo de error de programación puede ser?

Esto podría ser un problema de acceso asincrónico.

El método que aumenta el contador “Me gusta” podría verse así …

userLikesPost (userId, post) {
post.incrementLikeCounter ();
post.addUserLike (userId);
}

Del mismo modo, un método para la acción diferente -cuando el usuario hace clic en la acción Me gusta para deshacer la acción- probablemente sería como …

userUndoLike (userId, post) {
post.removeUserLike (userId);
post.decrementLikeCounter ();
}

Ahora que está fuera del camino, veamos la secuencia de llamadas a métodos que mostrarán la página …

likesCount = post.getLikesCount ();

… // algún código va aquí

if (likesCount> 0) {
displayString = post.getUserDisplayString ();
} más {
displayString = “Sé el primero en recibir me gusta en esta publicación”;
}

El problema podría haber sucedido cuando las siguientes acciones ocurren en esta secuencia particular.

  1. Al usuario-A le gusta la publicación. El recuento de Me gusta se actualiza en la base de datos con el valor “1”.
  2. El usuario B solicita que se represente la página.
  3. La variable likesCount está configurada correctamente en “1” según la base de datos.
  4. Cuando el control ejecuta los códigos en la sección marcada “// algún código va aquí”, al usuario-A no le gusta la publicación original. (Debido a que el renderizado de la página y los no me gusta del usuario se ven como acciones separadas e independientes, ambos pueden ejecutarse simultáneamente)
  5. El control de procesamiento ejecuta la if( likesCount > 0) y entra en la ruta TRUE e intenta recuperar la lista de usuarios a los que les ha gustado la publicación. Esto devuelve una cadena nula.

El error podría solucionarse esperando que el valor de displayString pueda ser nulo a veces.

Además, este es solo uno de los escenarios posibles, aunque raros, que me vino a la mente. También podría estar totalmente fuera de lugar.

Podría ser un problema de JavaScript. Tal vez el valor de una variable para el no recuento de los “me gusta” sea algo así como nulo. Entonces, en JavaScript, cuando el valor viene como nulo para una variable, entonces se muestra como indefinido.