Steffen Peters: Wie auf Ende einer Javascript-Funktion warten?

Beitrag lesen

Hallo,

über eine Funktion zerteile ich eine große Datei in Einzelteile (Chunks), um dies hochzuladen.

Mit einer kleinen Chunkgröße funktioniert es, aber wenn ich die Chunk-Größe erhöhe, funktioniert es nicht mehr. Ich vermute sehr stark, dass Javascript nicht mehr schnell genug ist, um den Chunk zurückzuliefern und die nachfolgende Funktion kann nicht mit dem Ergebnis arbeiten.

Die bisherige Funktion sieht wie folgt aus:

function slice(file, start, end) {
	var slice = file.mozSlice ? file.mozSlice :
		file.webkitSlice ? file.webkitSlice :
		file.slice ? file.slice : noop;
	return slice.bind(file)(start, end);
}

Und wird wie folgt aufgerufen:

var s = slice(file, start, end);
scount ++;
send(s,start,end,scount,size,num_of_slices,ext,filename,chunkid);
start += sliceSize;

Ich habe bisher noch keine Erfahrungen mit asynchronem Javascript gemacht und tue mich augenscheinlich mit den gefundenen Tutorials schwer, diese auf mein Problem zu übertragen.

Ich habe es wie folgt versucht:

const slice = (file, start, end) => {
	return new Promise((resolve, reject) => {
		var slice = file.mozSlice ? file.mozSlice :
			file.webkitSlice ? file.webkitSlice :
			file.slice ? file.slice : noop;
		resolve (slice.bind(file)(start, end));
	})
}
Und der Aufruf:
	slice(file, start, end).then(result => {
		scount ++;
		send(s,start,end,scount,size,num_of_slices,ext,filename,chunkid);
		start += sliceSize;
	});

Dieser läuft aber nun in einer Endlosschleife, zur Funktion send() kommt das Script offenbar nie.

Was mache ich hier falsch?

LG Steffen