@@ -633,7 +633,12 @@ def generate_js(data_target, data_files, metadata):
633
633
ret = ''
634
634
else :
635
635
if options .export_es6 :
636
- ret = 'export default function loadDataFile(Module) {'
636
+ ret = '''export default function loadDataFile(Module) {
637
+ var readyPromiseResolve, readyPromiseReject;
638
+ var readyPromise = new Promise((resolve, reject) => {
639
+ readyPromiseResolve = resolve;
640
+ readyPromiseReject = reject;
641
+ });'''
637
642
638
643
else :
639
644
ret = '''
@@ -704,6 +709,8 @@ def generate_js(data_target, data_files, metadata):
704
709
create_data = '''// canOwn this data in the filesystem, it is a slide into the heap that will never change
705
710
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true);
706
711
Module['removeRunDependency'](`fp ${that.name}`);'''
712
+ ready_promise = '''
713
+ readyPromiseResolve();'''
707
714
708
715
if not options .lz4 :
709
716
# Data requests - for getting a block of data out of the big archive - have
@@ -730,14 +737,14 @@ def generate_js(data_target, data_files, metadata):
730
737
finish: function(byteArray) {
731
738
var that = this;
732
739
%s
733
- this.requests[this.name] = null;
740
+ this.requests[this.name] = null;%s
734
741
}
735
742
};
736
743
737
744
var files = metadata['files'];
738
745
for (var i = 0; i < files.length; ++i) {
739
746
new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio'] || 0).open('GET', files[i]['filename']);
740
- }\n ''' % (create_preloaded if options .use_preload_plugins else create_data )
747
+ }\n ''' % (create_preloaded if options .use_preload_plugins else create_data , ready_promise if options . export_es6 else '' )
741
748
742
749
if options .has_embedded and not options .obj_output :
743
750
diagnostics .warn ('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more efficient than JS encoding' )
@@ -987,6 +994,9 @@ def generate_js(data_target, data_files, metadata):
987
994
return;
988
995
}''' .strip ()
989
996
997
+ reject_promise = '''
998
+ readyPromiseReject();'''
999
+
990
1000
ret += '''
991
1001
function fetchRemotePackage(packageName, packageSize, callback, errback) {
992
1002
%(node_support_code)s
@@ -1045,8 +1055,8 @@ def generate_js(data_target, data_files, metadata):
1045
1055
};
1046
1056
1047
1057
function handleError(error) {
1048
- console.error('package error:', error);
1049
- };\n ''' % {'node_support_code' : node_support_code }
1058
+ console.error('package error:', error);%(reject_promise)s
1059
+ };\n ''' % {'node_support_code' : node_support_code , 'reject_promise' : reject_promise if options . export_es6 else '' }
1050
1060
1051
1061
code += '''
1052
1062
function processPackageData(arrayBuffer) {
@@ -1174,7 +1184,11 @@ def generate_js(data_target, data_files, metadata):
1174
1184
loadPackage(%s);\n ''' % json .dumps (metadata )
1175
1185
1176
1186
if options .export_es6 :
1177
- ret += '\n };\n // END the loadDataFile function\n '
1187
+ ret += '''
1188
+ return readyPromise;
1189
+ };
1190
+ // END the loadDataFile function
1191
+ '''
1178
1192
else :
1179
1193
ret += '''
1180
1194
})();\n '''
0 commit comments