fix async (add Promise)

This commit is contained in:
YehudaEi
2020-12-10 00:39:10 +02:00
parent e6ce2f7ffe
commit ac92e10822

View File

@@ -14,20 +14,28 @@ async function startTest(){
} }
setText("status", "checking ping..."); setText("status", "checking ping...");
await ping((ms) => {setText("ping", ms)}); var pingMS = await ping();
if(status == "stoped"){stopTest();return;} setText("ping", pingMS);
if(status == "stop"){stopTest();return;}
setText("status", "checking download..."); setText("status", "checking download...");
await download((mb) => {setText("down", mb)}); var downMB = await download();
if(status == "stoped"){stopTest();return;} setText("down", downMB);
if(status == "stop"){stopTest();return;}
setText("status", "checking upload..."); setText("status", "checking upload...");
await upload((mb) => {setText("up", mb)}); var downMB = await upload();
if(status == "stoped"){stopTest();return;} setText("up", downMB);
status = "stop";
status = "";
setText("status", "done."); setText("status", "done.");
setText("button", "Start Test"); setText("button", "Start Test");
} }
function stopTest(){ function stopTest(){
status = "";
setText("button", "Start Test"); setText("button", "Start Test");
setText("status", "stoped."); setText("status", "stoped.");
} }
@@ -36,70 +44,77 @@ function setText(elm, text){
document.getElementById(elm).innerText = text; document.getElementById(elm).innerText = text;
} }
async function ping(callback) { async function ping() {
var startTime = 0; return new Promise(resolve => {
var request = new XMLHttpRequest(); var startTime = 0;
request.open("HEAD", serverEUrl + "?_=" + Math.random(), true); var request = new XMLHttpRequest();
request.onreadystatechange = function() { request.open("HEAD", serverEUrl + "?_=" + Math.random(), true);
if (request.readyState == 4) { request.onreadystatechange = function() {
var endTime = new Date().getTime(); if (request.readyState == 4) {
callback(endTime - startTime); var endTime = new Date().getTime();
resolve(endTime - startTime);
}
};
try {
startTime = new Date().getTime();
request.send(null);
} catch(exception) {
alert("Your internet connection is unavelible...");
} }
}; });
try {
startTime = new Date().getTime();
request.send(null);
} catch(exception) {
alert("Your internet connection is unavelible...");
}
} }
async function download(callback){ async function download(){
var startTime = 0; return new Promise(resolve => {
var request = new XMLHttpRequest(); var startTime = 0;
request.open("GET", serverGUrl, true); var request = new XMLHttpRequest();
request.onreadystatechange = function() { request.open("GET", serverGUrl, true);
if (request.readyState == 4 && request.status === 200) { request.onreadystatechange = function() {
var endTime = new Date().getTime(); if (request.readyState == 4 && request.status === 200) {
var reqLength = request.responseText.length * 8; var endTime = new Date().getTime();
var sumTime = (endTime - startTime) / 1000; var reqLength = request.responseText.length * 8;
var speed = (((reqLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2); var sumTime = (endTime - startTime) / 1000;
callback(speed + " Mbps"); var speed = (((reqLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2);
resolve(speed + " Mbps");
}
};
try {
startTime = new Date().getTime();
request.send(null);
} catch(exception) {
alert("Your internet connection is unavelible...");
} }
}; });
try {
startTime = new Date().getTime();
request.send(null);
} catch(exception) {
alert("Your internet connection is unavelible...");
}
} }
async function junkData(length){ function junkData(length){
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()`[]\\{}|:"<>?,./;\'', result = ''; var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()`[]\\{}|:"<>?,./;\'', result = '';
for (var i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)]; for (var i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)];
return result; return result;
} }
async function upload(callback){ async function upload(){
var startTime = 0; return new Promise(resolve => {
var junkLength = 2500000; var startTime = 0;
var junk = await junkData(junkLength); //=2.5 Mb var junkLength = 2500000; //=2.5 Mb
var request = new XMLHttpRequest(); var junk = junkData(junkLength);
request.open("POST", serverEUrl + "?_=" + Math.random(), true); console.log(junk);
request.setRequestHeader("Content-Type", "application/octet-stream"); var request = new XMLHttpRequest();
request.onreadystatechange = function() { request.open("POST", serverEUrl + "?_=" + Math.random(), true);
if (request.readyState == 4 && request.status === 200) { request.setRequestHeader("Content-Type", "application/octet-stream");
var endTime = new Date().getTime(); request.onreadystatechange = function() {
var sumTime = (endTime - startTime) / 1000; if (request.readyState == 4 && request.status === 200) {
var speed = (((junkLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2); var endTime = new Date().getTime();
callback(speed + " Mbps"); var sumTime = (endTime - startTime) / 1000;
var speed = (((junkLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2);
resolve(speed + " Mbps");
}
};
try {
startTime = new Date().getTime();
request.send(junk);
} catch(exception) {
alert("Your internet connection is unavelible...");
} }
}; });
try {
startTime = new Date().getTime();
request.send(junk);
} catch(exception) {
alert("Your internet connection is unavelible...");
}
} }