¿Cuáles son los errores más comunes al codificar con lenguajes asincrónicos?

Voy a nominar condiciones de carrera.

A algunas personas les gusta olvidar que existen condiciones de carrera en javascript, y de hecho, el modelo de concurrencia de javascript hace imposible una gran clase de carreras de datos. Bueno, me encontré con una condición de carrera bastante grave recientemente. Ya sea que lo planee o no, las solicitudes de ajax no son atómicas porque no son sincrónicas. El problema con el que me encontré fue que tenía algunos botones que activaban las solicitudes de ajax y movía al usuario al siguiente paso cuando la solicitud se realizaba correctamente. Pero durante ese tiempo mientras el servidor procesaba la solicitud, nada detendría al usuario de enviar una segunda solicitud, y la acción, desafortunadamente, no fue idempotente. Por lo tanto, el usuario puede hacer clic dos veces, el servidor responde dos veces y luego avanzar dos pasos, en lugar de uno :(. Lo arreglé refactorizando mi código para que el manejo del éxito sea idempotente.

Si está preguntando sobre el error de codificación más común en un software que tiene una arquitectura de software Async, entonces el error es: realizar llamadas de API de bloqueo en su código. En el modelo Async, tenemos hilos limitados y si realiza una llamada de bloqueo en el hilo, el hilo dejará de procesar otros eventos presentes en la cola.