Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.comp.lang.javascript Subject: =?UTF-8?Q?Re:_Anf=c3=a4ngerproblem_mit_asynchroner_Verarbeitung?= Date: Fri, 25 May 2018 17:45:58 +0200 Lines: 69 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net czsyml1lErbnTth/UYJbMgtDvqo38iTzturiblm46in2y5j0JI Cancel-Lock: sha1:DyoDw02fd3iUJhA/Ys0qjgvU/yg= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 Hamster/2.1.0.1538 In-Reply-To: Xref: csiph.com de.comp.lang.javascript:4953 Am 25.05.2018 um 16:33 schrieb Jan Novak: > ich habe unten stehenden Code, welcher mir Dateien öffnet, resized und > während der Laufzeit Infos ausgibt. Ich möchte nun, dass nach der > letzten Datei das modale Fenster (modal.style.display = "none";) > geschlossen wird. Da hilft nur mitzählen oder anderweitig Status für alle Dateien mitführen. > Zusätzlich wäre es schön, dass ich im modalen Fenster > anzeigen kann, welche Datei gerade bearbeitet wird und nicht diejenige, > welcher fertig ist. Asynchron heißt, dass du nicht weißt, welche Datei (Einzahl) gerade bearbeitet wird. Du kannst nur wissen, für welche Dateien (Mehrzahl) du bereits Requests abgesendet hast und welche davon schon zurückgekommen sind. Aus der Hüfte geschossen und ungetestet: > function resizing(mFiles){ > modal.style.display = "block"; var numRequests = 0, pendingFiles = {}; function updateDisplay() { if (numRequests === 0) { modal.style.display = "none" } else { document.getElementById("INFO_TEXT").innerHTML = "Processing " + Object.keys(pendingFiles).join(', '); // ^^^ hier wäre noch HTML-Escaping notwendig. } } > document.getElementById("INFO_TEXT").innerHTML = "Processing ..."; > var archiveId = $( "#ARCHIVE" ).val(); > mFiles.forEach(function(item, index, array) { > var request=baseURL + > '/include/api/upload_process.php?action=createImg&file='+item["name"]; ++numRequests; pendingFiles[item.name] = 1; > $.ajax({ > url: request, > async: true > }).done(function(data) { > ret = JSON.parse(data); > console.log(ret); --numRequests; delete item.name; updateDisplay(); /* > document.getElementById("INFO_TEXT").innerHTML = "Processing > ready: "+ item["name"]; */ > }); > }); /* > modal.style.display = "none"; > console.log("done"); */ Stefan