For some reason I don't understand, the introduction of the `uploadDone`
function messed with the garbage collector and triggered a lot of
Uncaught InvalidStateError: An attempt was made to use an object that is not,
or is no longer, usable.
Alternating between senders works around this problem.
| ... | ... |
@@ -18,15 +18,17 @@ var cfg_endpoint = null; |
| 18 | 18 |
var cfg_data_field = null; |
| 19 | 19 |
|
| 20 | 20 |
var to_send = []; |
| 21 |
-var sender = new XMLHttpRequest(); |
|
| 21 |
+var senders = [new XMLHttpRequest(), new XMLHttpRequest()]; |
|
| 22 |
+var i_sender = 1; |
|
| 22 | 23 |
|
| 23 | 24 |
function sendHead() {
|
| 24 | 25 |
if (to_send.length < 1) return; |
| 25 | 26 |
var line = to_send[0].split(";")[1];
|
| 26 | 27 |
var data = new FormData(); |
| 27 | 28 |
data.append(cfg_data_field, line); |
| 28 |
- sender.open("POST", cfg_endpoint, true);
|
|
| 29 |
- sender.send(data); |
|
| 29 |
+ i_sender = 1 - i_sender; |
|
| 30 |
+ senders[i_sender].open("POST", cfg_endpoint, true);
|
|
| 31 |
+ senders[i_sender].send(data); |
|
| 30 | 32 |
} |
| 31 | 33 |
|
| 32 | 34 |
function enqueue(key, line) {
|
| ... | ... |
@@ -42,8 +44,10 @@ function uploadDone() {
|
| 42 | 44 |
|
| 43 | 45 |
function uploadError() { console.log(this.statusText); }
|
| 44 | 46 |
|
| 45 |
-sender.addEventListener("load", uploadDone);
|
|
| 46 |
-sender.addEventListener("error", uploadError);
|
|
| 47 |
+senders[0].addEventListener("load", uploadDone);
|
|
| 48 |
+senders[0].addEventListener("error", uploadError);
|
|
| 49 |
+senders[1].addEventListener("load", uploadDone);
|
|
| 50 |
+senders[1].addEventListener("error", uploadError);
|
|
| 47 | 51 |
|
| 48 | 52 |
Pebble.addEventListener("ready", function() {
|
| 49 | 53 |
console.log("Health Export PebbleKit JS ready!");
|