Ho diversi UpdatePanels ASP.NET, ciascuno con un AsyncPostBackTrigger legato allo stesso evento click server. Poiché solo un UpdatePanel può fare il suo lavoro alla volta, io uso .get_isInAsyncPostBack()
dello PageRequestManager
per impedire a un utente di accedere a un'altra parte della pagina fino al completamento del postback async.Javascript: modalità non bloccante per attendere che una condizione sia vera
Un'altra parte di questa pagina deve aggiornare in modo dinamico più pannelli di aggiornamento in modo consecutivo. Poiché i pannelli di aggiornamento utilizzano trigger asincroni, la chiamata __doPostBack("<%=ButtonName.ClientID %>", 'PanelId');
viene attivata in modo asincrono. Per questo motivo, passerà rapidamente alla successiva iterazione del ciclo e tenterà di aggiornare il pannello successivo. Tuttavia, la seconda iterazione fallisce perché c'è già un altro pannello di aggiornamento che fa un postback asincrono.
Idealmente, ci sarebbe un modo per attendere che .get_isInAsyncPostBack()
restituisca false senza bloccare altre attività del client.
La ricerca mi ha portato a molte persone con il mio problema, quasi tutti i quali sono invitati a utilizzare setTimeOut()
. Non penso che questo funzionerà per me. Non voglio aspettare un intervallo di tempo specificato prima di eseguire una funzione. Voglio semplicemente che il mio Javascript attenda mentre è in esecuzione un altro script, preferibilmente attendere fino a quando una condizione specifica è vera.
Capisco che molti probabilmente vorranno suggerire di ripensare il mio modello. In realtà non è il mio modello, ma quello che è stato consegnato al nostro team di sviluppo che attualmente è un disastro totale sotto il cofano. A causa dei limiti temporali, la riscrittura del modello non è un'opzione. L'unica opzione è far funzionare questo. Penso che se avessi un modo per far aspettare il codice client senza bloccare, il mio problema sarebbe risolto.
Questo semplicemente non è come funziona JavaScript. Eseguirà tutto il codice in modo sincrono. I nuovi HTML5 [Web Workers] (https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers) potrebbero aiutare, ma per il resto non avrai altra scelta che usare 'setTimeout' /' setInterval '. – user2428118
Buona domanda. L'ho trovato quando ne ho provati due ne scrivo uno. – pylover