JavaScript
const getData = function(url) {
fetch(url)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log(error));
}
getData(url);
const getData = function(url) {
fetch(url)
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log(error));
}
getData(url);
const getData = async function(url) {
try {
const response = await fetch(url);
const data = await response.json();
console.log(data);
} catch (error) {
console.log(error);
}
}
getData(url);Varje instruktion måste avslutas innan nästa instruktion kan köras.
Fler processer kan alltså inte köras samtidigt.
const arr = [1,3,4,5,6,7]
const anotherArr = [1,3,4]
for(let i = 0; i < arr.length; i++) {
console.log(arr[i])
}
console.log("For loop 1 done...")
for(let j = 0; j < anotherArrlength; j++) {
console.log(anotherArr[j])
}
console.log("For loop 2 done...")En del rutiner tar tid. Exempel HTTP-requests eller hämta från databas. Hur hantera vi detta?
sånt som blockar!
Statement 1
Statement 2
Statement 3
Statement 4
HTTP REQUEST
🕰
HÄMTA FRÅN DB
🕰
BLOCKERANDE 👎
När man bygger webbapplikationer som efterfrågar från API:er eller en databas blir det här problemet mer påtagligt. Ingen användare vill att ett fönster ska "frysas" medan text eller bild laddas in.
I synkron programmering så blockar programmet när det väntar på input från användaren, eller när programmet hämtar från API/databas eller input från användaren.
För webbapplikationer handlar långa väntetider just om väntetid (inte beräkningstid) som hämta från API/databas. Här kommer alltså asynkron programmering i Javascript till sin stora nytta!
HTTP
förfrågan
väntar på respons
HTTP
förfrågan
Andra processer kan köras
HTTP svar
=> gör något med det
Statement 1
Statement 2
Statement 3
CALLBACK
HTTP REQUEST
🕰
ICKE-BLOCKERANDE 👍
HTTP REQUEST
Starta exekveringen nu, men avsluta senare
"BAKGRUNDEN"
async function getTodos() {
try {
// Väntar in tills datat har hämtats från todos.json
const response = await fetch("https://jsonplaceholder.typicode.com/todos");
// response.ok är att HTTP-status koden är 200 om hämtningen lyckas
if(!response.ok) {
throw new Error(`HTTP error status ${response.status}`);
}
// Väntar in till datat har parsats (översatts) till ett JS objekt
const data = await response.json();
// Logga ut datan
console.log(data);
// Visa alla todos i DOM:en
displayTodos(data);
} catch(error) {
console.error("Type of error", error);
}
}
function displayTodos(todos) {
const ul = document.getElementById("data-list");
todos.forEach(function(todo) {
const li = document.createElement("li");
li.textContent = todo.title;
ul.appendChild(li);
})
}
getTodos();Allmänt verktyg för felhantering