Tengo varios ASP.NET UpdatePanels, cada uno con un AsyncPostBackTrigger vinculado al evento del clic del mismo botón en el servidor. Dado que solo un UpdatePanel puede hacer lo suyo a la vez, uso .get_isInAsyncPostBack()
del PageRequestManager
para evitar que un usuario pueda acceder a otra parte de la página hasta que se complete la devolución de datos asincrónica.Javascript: forma de no bloqueo para esperar hasta que una condición sea verdadera
Otra parte de esta página necesita actualizar dinámicamente varios paneles de actualización consecutivamente. Como los paneles de actualización usan activadores asíncronos, llama __doPostBack("<%=ButtonName.ClientID %>", 'PanelId');
dispara de manera asincrónica. Debido a esto, se moverá rápidamente a la siguiente iteración del ciclo e intentará actualizar el siguiente panel. Sin embargo, la segunda iteración falla porque ya hay otro panel de actualización haciendo una devolución de datos asincrónica.
Idealmente, habría una manera de esperar hasta que .get_isInAsyncPostBack()
devuelva falso sin bloquear otra actividad del cliente.
La investigación me ha llevado a mucha gente con mi problema, a casi todos se les aconseja usar setTimeOut()
. No creo que esto funcione para mí. No quiero esperar una cantidad específica de tiempo antes de ejecutar una función. Simplemente quiero que mi Javascript espere mientras se ejecuta otro script, preferiblemente espere hasta que una condición específica sea verdadera.
Entiendo que muchos probablemente querrán sugerir que reconsidere mi modelo. En realidad, no es mi modelo, sino uno que fue entregado a nuestro equipo de desarrollo que actualmente es un desastre total bajo el capó. Debido a limitaciones de tiempo, la reescritura del modelo no es una opción. La única opción es hacer que esto funcione. Creo que si tuviera una forma de hacer que el código del cliente espere sin bloquear, mi problema estaría resuelto.
Simplemente así no es como funciona JavaScript. Ejecutará todo el código sincrónicamente. HTML5s enfriar nuevos [Web Workers] (https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers) podría ayudar, pero para el resto no tendrá más remedio que utilizar 'setTimeout' /' setInterval '. – user2428118
Buena pregunta. Lo encontré cuando intento dos escribir uno. – pylover