@@ -633,7 +633,12 @@ def generate_js(data_target, data_files, metadata):
633633 ret = ''
634634 else :
635635 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+ });'''
637642
638643 else :
639644 ret = '''
@@ -704,6 +709,8 @@ def generate_js(data_target, data_files, metadata):
704709 create_data = '''// canOwn this data in the filesystem, it is a slide into the heap that will never change
705710 Module['FS_createDataFile'](this.name, null, byteArray, true, true, true);
706711 Module['removeRunDependency'](`fp ${that.name}`);'''
712+ ready_promise = '''
713+ readyPromiseResolve();'''
707714
708715 if not options .lz4 :
709716 # 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):
730737 finish: function(byteArray) {
731738 var that = this;
732739 %s
733- this.requests[this.name] = null;
740+ this.requests[this.name] = null;%s
734741 }
735742 };
736743
737744 var files = metadata['files'];
738745 for (var i = 0; i < files.length; ++i) {
739746 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 '' )
741748
742749 if options .has_embedded and not options .obj_output :
743750 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' )
@@ -983,6 +990,9 @@ def generate_js(data_target, data_files, metadata):
983990 return;
984991 }''' .strip ()
985992
993+ reject_promise = '''
994+ readyPromiseReject();'''
995+
986996 ret += '''
987997 function fetchRemotePackage(packageName, packageSize, callback, errback) {
988998 %(node_support_code)s
@@ -1041,8 +1051,8 @@ def generate_js(data_target, data_files, metadata):
10411051 };
10421052
10431053 function handleError(error) {
1044- console.error('package error:', error);
1045- };\n ''' % {'node_support_code' : node_support_code }
1054+ console.error('package error:', error);%(reject_promise)s
1055+ };\n ''' % {'node_support_code' : node_support_code , 'reject_promise' : reject_promise if options . export_es6 else '' }
10461056
10471057 code += '''
10481058 function processPackageData(arrayBuffer) {
@@ -1165,7 +1175,11 @@ def generate_js(data_target, data_files, metadata):
11651175 loadPackage(%s);\n ''' % json .dumps (metadata )
11661176
11671177 if options .export_es6 :
1168- ret += '\n };\n // END the loadDataFile function\n '
1178+ ret += '''
1179+ return readyPromise;
1180+ };
1181+ // END the loadDataFile function
1182+ '''
11691183 else :
11701184 ret += '''
11711185 })();\n '''
0 commit comments