Skip to content

Commit 2e8f08f

Browse files
committed
Convert webworker template runtime to Promise-based API
Fixes 'cannot call method then on undefined' error when using HMR with a config whose target is "webworker". Probably should have happened with 2245c4a
1 parent 1f781c1 commit 2e8f08f

1 file changed

Lines changed: 33 additions & 31 deletions

File tree

lib/webworker/WebWorkerMainTemplate.runtime.js

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,39 +14,41 @@ module.exports = function() {
1414
}
1515

1616
function hotDownloadManifest(callback) { // eslint-disable-line no-unused-vars
17-
if(typeof XMLHttpRequest === "undefined")
18-
return callback(new Error("No browser support"));
19-
try {
20-
var request = new XMLHttpRequest();
21-
var requestPath = $require$.p + $hotMainFilename$;
22-
request.open("GET", requestPath, true);
23-
request.timeout = 10000;
24-
request.send(null);
25-
} catch(err) {
26-
return callback(err);
27-
}
28-
request.onreadystatechange = function() {
29-
if(request.readyState !== 4) return;
30-
if(request.status === 0) {
31-
// timeout
32-
callback(new Error("Manifest request to " + requestPath + " timed out."));
33-
} else if(request.status === 404) {
34-
// no update available
35-
callback();
36-
} else if(request.status !== 200 && request.status !== 304) {
37-
// other failure
38-
callback(new Error("Manifest request to " + requestPath + " failed."));
39-
} else {
40-
// success
41-
try {
42-
var update = JSON.parse(request.responseText);
43-
} catch(e) {
44-
callback(e);
45-
return;
17+
return new Promise(function(resolve, reject) {
18+
if(typeof XMLHttpRequest === "undefined")
19+
return reject(new Error("No browser support"));
20+
try {
21+
var request = new XMLHttpRequest();
22+
var requestPath = $require$.p + $hotMainFilename$;
23+
request.open("GET", requestPath, true);
24+
request.timeout = 10000;
25+
request.send(null);
26+
} catch(err) {
27+
return reject(err);
28+
}
29+
request.onreadystatechange = function() {
30+
if(request.readyState !== 4) return;
31+
if(request.status === 0) {
32+
// timeout
33+
reject(new Error("Manifest request to " + requestPath + " timed out."));
34+
} else if(request.status === 404) {
35+
// no update available
36+
resolve();
37+
} else if(request.status !== 200 && request.status !== 304) {
38+
// other failure
39+
reject(new Error("Manifest request to " + requestPath + " failed."));
40+
} else {
41+
// success
42+
try {
43+
var update = JSON.parse(request.responseText);
44+
} catch(e) {
45+
reject(e);
46+
return;
47+
}
48+
resolve(update);
4649
}
47-
callback(null, update);
4850
}
49-
};
51+
});
5052
}
5153

5254
function hotDiposeChunk(chunkId) {

0 commit comments

Comments
 (0)