Skip to content

Commit 7d1b5dd

Browse files
committed
async function promise behaviour
1 parent 7e26de7 commit 7d1b5dd

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

test/test_other.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3977,12 +3977,11 @@ def test_file_packager_standalone_modularize(self):
39773977
import {default as loadModule} from './moduleFile.js'
39783978

39793979
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
3980-
var module = loadModule();
3981-
module.then(async (module) => {
3982-
loadDataFile(module);
3983-
// sleep so we don't have to use monitorRunDependencies logic
3984-
await sleep(2000);
3985-
module._test_fun();
3980+
loadModule().then(async (module) => {
3981+
loadDataFile(module).then(() => {
3982+
module._test_fun();
3983+
}
3984+
);
39863985
});
39873986
''')
39883987

tools/file_packager.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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')
@@ -979,6 +986,9 @@ def generate_js(data_target, data_files, metadata):
979986
return;
980987
}'''.strip()
981988

989+
reject_promise = '''
990+
readyPromiseReject();'''
991+
982992
ret += '''
983993
function fetchRemotePackage(packageName, packageSize, callback, errback) {
984994
%(node_support_code)s
@@ -1037,8 +1047,8 @@ def generate_js(data_target, data_files, metadata):
10371047
};
10381048
10391049
function handleError(error) {
1040-
console.error('package error:', error);
1041-
};\n''' % {'node_support_code': node_support_code}
1050+
console.error('package error:', error);%(reject_promise)s
1051+
};\n''' % {'node_support_code': node_support_code, 'reject_promise': reject_promise if options.export_es6 else ''}
10421052

10431053
code += '''
10441054
function processPackageData(arrayBuffer) {
@@ -1159,7 +1169,11 @@ def generate_js(data_target, data_files, metadata):
11591169
loadPackage(%s);\n''' % json.dumps(metadata)
11601170

11611171
if options.export_es6:
1162-
ret += '\n};\n// END the loadDataFile function\n'
1172+
ret += '''
1173+
return readyPromise;
1174+
};
1175+
// END the loadDataFile function
1176+
'''
11631177
else:
11641178
ret += '''
11651179
})();\n'''

0 commit comments

Comments
 (0)