Skip to content

Commit 0919a02

Browse files
authored
[file_packager] Use await when waiting for fetch to complete. (#24992)
1 parent 616de6b commit 0919a02

File tree

3 files changed

+15
-34
lines changed

3 files changed

+15
-34
lines changed

test/code_size/test_codesize_file_preload.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"a.out.js": 22730,
3-
"a.out.js.gz": 9405,
2+
"a.out.js": 22699,
3+
"a.out.js.gz": 9379,
44
"a.out.nodebug.wasm": 1733,
55
"a.out.nodebug.wasm.gz": 980,
6-
"total": 24463,
7-
"total_gz": 10385,
6+
"total": 24432,
7+
"total_gz": 10359,
88
"sent": [
99
"a (fd_write)"
1010
],

test/other/codesize/test_codesize_file_preload.expected.js

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,12 @@ Module["expectedDataFileDownloads"]++;
100100
}
101101
return packageData.buffer;
102102
}
103-
var fetchedCallback;
103+
var fetchPromise;
104104
var fetched = Module["getPreloadedPackage"]?.(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE);
105105
if (!fetched) {
106106
// Note that we don't use await here because we want to execute the
107107
// the rest of this function immediately.
108-
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE).then(data => {
109-
if (fetchedCallback) {
110-
fetchedCallback(data);
111-
fetchedCallback = null;
112-
} else {
113-
fetched = data;
114-
}
115-
});
108+
fetchPromise = fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE);
116109
}
117110
async function runWithFS(Module) {
118111
function assert(check, msg) {
@@ -141,12 +134,10 @@ Module["expectedDataFileDownloads"]++;
141134
Module["preloadResults"][PACKAGE_NAME] = {
142135
fromCache: false
143136
};
144-
if (fetched) {
145-
processPackageData(fetched);
146-
fetched = null;
147-
} else {
148-
fetchedCallback = processPackageData;
137+
if (!fetched) {
138+
fetched = await fetchPromise;
149139
}
140+
processPackageData(fetched);
150141
}
151142
if (Module["calledRun"]) {
152143
runWithFS(Module);

tools/file_packager.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,31 +1044,21 @@ def generate_js(data_target, data_files, metadata):
10441044
# Only tricky bit is the fetch is async, but also when runWithFS is called
10451045
# is async, so we handle both orderings.
10461046
ret += '''
1047-
var fetchedCallback;
1047+
var fetchPromise;
10481048
var fetched = Module['getPreloadedPackage']?.(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE);
10491049
10501050
if (!fetched) {
10511051
// Note that we don't use await here because we want to execute the
10521052
// the rest of this function immediately.
1053-
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE)
1054-
.then((data) => {
1055-
if (fetchedCallback) {
1056-
fetchedCallback(data);
1057-
fetchedCallback = null;
1058-
} else {
1059-
fetched = data;
1060-
}
1061-
})%s;
1053+
fetchPromise = fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE)%s;
10621054
}\n''' % catch_handler
10631055

10641056
code += '''
10651057
Module['preloadResults'][PACKAGE_NAME] = {fromCache: false};
1066-
if (fetched) {
1067-
processPackageData(fetched);
1068-
fetched = null;
1069-
} else {
1070-
fetchedCallback = processPackageData;
1071-
}\n'''
1058+
if (!fetched) {
1059+
fetched = await fetchPromise;
1060+
}
1061+
processPackageData(fetched);\n'''
10721062

10731063
ret += '''
10741064
async function runWithFS(Module) {\n'''

0 commit comments

Comments
 (0)