Use promises for file loading.
This commit is contained in:
parent
9901ba1f4c
commit
2757d9ecb5
@ -95,6 +95,10 @@
|
||||
style="width: 360px; height: 240px;"
|
||||
model="../../test/testfiles/obj/hundred_cubes.obj,../../test/testfiles/obj/hundred_cubes.mtl">
|
||||
</div>
|
||||
<div class="online_3d_viewer"
|
||||
style="width: 360px; height: 240px;"
|
||||
model="../../test/testfiles/obj/hundred_cubes.obj,../../test/testfiles/obj/not_exising.mtl,../../test/testfiles/obj/hundred_cubes.mtl">
|
||||
</div>
|
||||
<div class="online_3d_viewer"
|
||||
style="width: 360px; height: 240px;"
|
||||
model="../../test/testfiles/3ds/cube_four_instances.3ds,../../test/testfiles/3ds/texture.png"
|
||||
|
||||
@ -142,22 +142,21 @@ OV.FileList = class
|
||||
return;
|
||||
}
|
||||
let format = this.GetFileFormat (file);
|
||||
let callbacks = {
|
||||
success : (content) => {
|
||||
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)
|
||||
|
||||
@ -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 ();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user