From 2757d9ecb5308091f6a150dc7e1307ac27694059 Mon Sep 17 00:00:00 2001 From: kovacsv Date: Wed, 28 Jul 2021 08:51:32 +0200 Subject: [PATCH] Use promises for file loading. --- sandbox/embed_selfhost_multiple.html | 4 + source/import/importer.js | 25 +++--- source/io/fileutils.js | 124 ++++++++++----------------- 3 files changed, 60 insertions(+), 93 deletions(-) diff --git a/sandbox/embed_selfhost_multiple.html b/sandbox/embed_selfhost_multiple.html index bc768b7..0fcdb04 100644 --- a/sandbox/embed_selfhost_multiple.html +++ b/sandbox/embed_selfhost_multiple.html @@ -95,6 +95,10 @@ style="width: 360px; height: 240px;" model="../../test/testfiles/obj/hundred_cubes.obj,../../test/testfiles/obj/hundred_cubes.mtl"> +
+
{ - file.SetContent (format, content); - }, - error : () => { - - }, - complete : () => { - complete (); - } - }; + let loaderPromise = null; if (file.source === OV.FileSource.Url) { - OV.RequestUrl (file.fileUrl, format, callbacks); + loaderPromise = OV.RequestUrl (file.fileUrl, format); } else if (file.source === OV.FileSource.File) { - OV.ReadFile (file.fileObject, format, callbacks); + loaderPromise = OV.ReadFile (file.fileObject, format); + } else { + complete (); + return; } + loaderPromise.then ((content) => { + file.SetContent (format, content); + }).catch (() => { + }).finally (() => { + complete (); + }); } GetFileFormat (file) diff --git a/source/io/fileutils.js b/source/io/fileutils.js index 31eeb9b..176059d 100644 --- a/source/io/fileutils.js +++ b/source/io/fileutils.js @@ -37,94 +37,58 @@ OV.GetFileExtension = function (filePath) return fileName.substr (firstPoint + 1); }; -OV.RequestUrl = function (url, format, callbacks) +OV.RequestUrl = function (url, format) { - function OnSuccess (result) - { - if (callbacks.success) { - callbacks.success (result); - } - if (callbacks.complete) { - callbacks.complete (); - } - } - - function OnError () - { - if (callbacks.error) { - callbacks.error (); - } - if (callbacks.complete) { - callbacks.complete (); - } - } - - let request = new XMLHttpRequest (); - request.open ('GET', url, true); - if (format === OV.FileFormat.Text) { - request.responseType = 'text'; - } else if (format === OV.FileFormat.Binary) { - request.responseType = 'arraybuffer'; - } else { - OnError (); - return; - } - - request.onload = function () { - if (request.status === 200) { - let response = request.response; - OnSuccess (response); + return new Promise ((resolve, reject) => { + let request = new XMLHttpRequest (); + request.open ('GET', url, true); + if (format === OV.FileFormat.Text) { + request.responseType = 'text'; + } else if (format === OV.FileFormat.Binary) { + request.responseType = 'arraybuffer'; } else { - OnError (); + reject (); + return; } - }; - request.onerror = function () { - OnError (); - }; - - request.send (null); + request.onload = function () { + if (request.status === 200) { + resolve (request.response); + } else { + reject (); + } + }; + + request.onerror = function () { + reject (); + }; + + request.send (null); + }); }; -OV.ReadFile = function (file, format, callbacks) +OV.ReadFile = function (file, format) { - function OnSuccess (result) - { - if (callbacks.success) { - callbacks.success (result); - } - if (callbacks.complete) { - callbacks.complete (); - } - } + return new Promise ((resolve, reject) => { + let reader = new FileReader (); - function OnError () - { - if (callbacks.error) { - callbacks.error (); - } - if (callbacks.complete) { - callbacks.complete (); - } - } + reader.onloadend = function (event) { + if (event.target.readyState === FileReader.DONE) { + resolve (event.target.result); + } + }; + + reader.onerror = function () { + reject (); + }; - let reader = new FileReader (); - - reader.onloadend = function (event) { - if (event.target.readyState === FileReader.DONE) { - OnSuccess (event.target.result); + if (format === OV.FileFormat.Text) { + reader.readAsText (file); + } else if (format === OV.FileFormat.Binary) { + reader.readAsArrayBuffer (file); + } else { + reject (); } - }; - - reader.onerror = function () { - OnError (); - }; - - if (format === OV.FileFormat.Text) { - reader.readAsText (file); - } else if (format === OV.FileFormat.Binary) { - reader.readAsArrayBuffer (file); - } else { - OnError (); - } + }); }; +