utils.js (1350B)
1 // Utilities 2 // ========= 3 4 // Helper that uses FileReader or FileReaderSync based on context and returns 5 // a Promise that resolves with the text or rejects with error. 6 function readAsText(blob) { 7 if (typeof FileReader !== "undefined") { 8 return new Promise(function (resolve, reject) { 9 var fs = new FileReader(); 10 fs.onload = function () { 11 resolve(fs.result); 12 }; 13 fs.onerror = reject; 14 fs.readAsText(blob); 15 }); 16 } else { 17 var fs = new FileReaderSync(); 18 return Promise.resolve(fs.readAsText(blob)); 19 } 20 } 21 22 function readAsArrayBuffer(blob) { 23 if (typeof FileReader !== "undefined") { 24 return new Promise(function (resolve, reject) { 25 var fs = new FileReader(); 26 fs.onload = function () { 27 resolve(fs.result); 28 }; 29 fs.onerror = reject; 30 fs.readAsArrayBuffer(blob); 31 }); 32 } else { 33 var fs = new FileReaderSync(); 34 return Promise.resolve(fs.readAsArrayBuffer(blob)); 35 } 36 } 37 38 function waitForState(worker, state, context) { 39 return new Promise(resolve => { 40 if (worker.state === state) { 41 resolve(context); 42 return; 43 } 44 worker.addEventListener("statechange", function onStateChange() { 45 if (worker.state === state) { 46 worker.removeEventListener("statechange", onStateChange); 47 resolve(context); 48 } 49 }); 50 }); 51 }