Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Förståelse av Callbacks i JavaScript | Asynkron JavaScript och API-integration
Avancerad JavaScript-mästerskap

bookFörståelse av Callbacks i JavaScript

Vad är en callback?

I JavaScript används callbacks ofta för att hantera asynkrona uppgifter, såsom att hämta data från ett API, läsa filer eller vänta på användarinmatning.

Callbacks utgör grunden för asynkron programmering i JavaScript eftersom de möjliggör att programmet kan hantera tidskrävande uppgifter utan att blockera exekveringen av resten av koden.

Hur callbacks fungerar i asynkron programmering

Vid en asynkron operation körs en callback-funktion när operationen är klar, vilket säkerställer att resten av programmet kan fortsätta medan uppgiften slutförs.

index.html

index.html

index.js

index.js

copy
  • fetchData: Simulerar en asynkron operation (som att hämta data), vilket tar 2 sekunder att slutföra. Callback-funktionen anropas när datan är tillgänglig;
  • displayData: Callback-funktionen som skickas till fetchData. Den anropas med den hämtade datan när operationen är klar;
  • Resten av koden fortsätter att exekveras medan datan hämtas, och när datan är klar utlöses callbacken för att bearbeta den.

Problem med callbacks: Callback hell och nästling

Även om callbacks är kraftfulla kan de snabbt leda till problem när det finns många asynkrona operationer som är beroende av varandra. Detta resulterar ofta i "callback hell", där callbacks är djupt nästlade, vilket gör koden svår att läsa och underhålla.

getUser(1, user => {
  console.log('User fetched:', user);

  getOrders(user.id, orders => {
    console.log('Orders fetched:', orders);

    getOrderDetails(orders[0].id, orderDetails => {
      console.log('Order details fetched:', orderDetails);

      getShippingStatus(orderDetails.shippingId, status => {
        console.log('Shipping status fetched:', status);
      });
    });
  });
});

Detta exempel illustrerar callback hell, ett problem som uppstår när flera asynkrona operationer är beroende av varandra, vilket leder till djupt nästlade callbacks. Här är varje funktion (getUser, getOrders, getOrderDetails, getShippingStatus) beroende av resultatet från den föregående, vilket resulterar i en nästlad struktur som är svår att läsa, underhålla och felsöka. Detta tillvägagångssätt försvårar felhantering, flödeskontroll och framtida ändringar, vilket gör koden svårarbetad när antalet callbacks ökar.

Omstrukturering av callbacks för renare kod

För att undvika callback hell och förbättra läsbarheten och underhållbarheten i din kod finns det några strategier för att omstrukturera callbacks:

Namngivna funktioner: Istället för att använda anonyma callback-funktioner, skapa namngivna funktioner som kan återanvändas och gör koden mer organiserad.

function getUserCallback(user) {
  console.log('User fetched:', user);
  getOrders(user.id, getOrdersCallback);
}

function getOrdersCallback(orders) {
  console.log('Orders fetched:', orders);
  getOrderDetails(orders[0].id, getOrderDetailsCallback);
}

function getOrderDetailsCallback(orderDetails) {
  console.log('Order details fetched:', orderDetails);
  getShippingStatus(orderDetails.shippingId, getShippingStatusCallback);
}

function getShippingStatusCallback(status) {
  console.log('Shipping status fetched:', status);
}

getUser(1, getUserCallback);

Genom att använda namngivna funktioner blir kodflödet tydligare. Det är enklare att förstå, underhålla och felsöka än djupt nästlade anonyma callbacks.

Bryta ned logiken: Dela upp komplexa uppgifter i mindre funktioner. Varje funktion bör utföra en specifik operation och anropa nästa operation. Detta minskar nästling och gör koden mer modulär.

Promises (kommer att behandlas i senare kapitel): Promises är ett modernt alternativ till callbacks och erbjuder ett renare, mer lättläst sätt att hantera asynkrona operationer. Promises hjälper till att eliminera callback hell genom att kedja .then()-metoder.

1. Vad är en callback-funktion?

2. Vad är "callback hell"?

question mark

Vad är en callback-funktion?

Select the correct answer

question mark

Vad är "callback hell"?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you give an example of a simple callback in JavaScript?

What are some common use cases for callbacks in real-world applications?

How do callbacks differ from promises in handling asynchronous code?

Awesome!

Completion rate improved to 2.22

bookFörståelse av Callbacks i JavaScript

Svep för att visa menyn

Vad är en callback?

I JavaScript används callbacks ofta för att hantera asynkrona uppgifter, såsom att hämta data från ett API, läsa filer eller vänta på användarinmatning.

Callbacks utgör grunden för asynkron programmering i JavaScript eftersom de möjliggör att programmet kan hantera tidskrävande uppgifter utan att blockera exekveringen av resten av koden.

Hur callbacks fungerar i asynkron programmering

Vid en asynkron operation körs en callback-funktion när operationen är klar, vilket säkerställer att resten av programmet kan fortsätta medan uppgiften slutförs.

index.html

index.html

index.js

index.js

copy
  • fetchData: Simulerar en asynkron operation (som att hämta data), vilket tar 2 sekunder att slutföra. Callback-funktionen anropas när datan är tillgänglig;
  • displayData: Callback-funktionen som skickas till fetchData. Den anropas med den hämtade datan när operationen är klar;
  • Resten av koden fortsätter att exekveras medan datan hämtas, och när datan är klar utlöses callbacken för att bearbeta den.

Problem med callbacks: Callback hell och nästling

Även om callbacks är kraftfulla kan de snabbt leda till problem när det finns många asynkrona operationer som är beroende av varandra. Detta resulterar ofta i "callback hell", där callbacks är djupt nästlade, vilket gör koden svår att läsa och underhålla.

getUser(1, user => {
  console.log('User fetched:', user);

  getOrders(user.id, orders => {
    console.log('Orders fetched:', orders);

    getOrderDetails(orders[0].id, orderDetails => {
      console.log('Order details fetched:', orderDetails);

      getShippingStatus(orderDetails.shippingId, status => {
        console.log('Shipping status fetched:', status);
      });
    });
  });
});

Detta exempel illustrerar callback hell, ett problem som uppstår när flera asynkrona operationer är beroende av varandra, vilket leder till djupt nästlade callbacks. Här är varje funktion (getUser, getOrders, getOrderDetails, getShippingStatus) beroende av resultatet från den föregående, vilket resulterar i en nästlad struktur som är svår att läsa, underhålla och felsöka. Detta tillvägagångssätt försvårar felhantering, flödeskontroll och framtida ändringar, vilket gör koden svårarbetad när antalet callbacks ökar.

Omstrukturering av callbacks för renare kod

För att undvika callback hell och förbättra läsbarheten och underhållbarheten i din kod finns det några strategier för att omstrukturera callbacks:

Namngivna funktioner: Istället för att använda anonyma callback-funktioner, skapa namngivna funktioner som kan återanvändas och gör koden mer organiserad.

function getUserCallback(user) {
  console.log('User fetched:', user);
  getOrders(user.id, getOrdersCallback);
}

function getOrdersCallback(orders) {
  console.log('Orders fetched:', orders);
  getOrderDetails(orders[0].id, getOrderDetailsCallback);
}

function getOrderDetailsCallback(orderDetails) {
  console.log('Order details fetched:', orderDetails);
  getShippingStatus(orderDetails.shippingId, getShippingStatusCallback);
}

function getShippingStatusCallback(status) {
  console.log('Shipping status fetched:', status);
}

getUser(1, getUserCallback);

Genom att använda namngivna funktioner blir kodflödet tydligare. Det är enklare att förstå, underhålla och felsöka än djupt nästlade anonyma callbacks.

Bryta ned logiken: Dela upp komplexa uppgifter i mindre funktioner. Varje funktion bör utföra en specifik operation och anropa nästa operation. Detta minskar nästling och gör koden mer modulär.

Promises (kommer att behandlas i senare kapitel): Promises är ett modernt alternativ till callbacks och erbjuder ett renare, mer lättläst sätt att hantera asynkrona operationer. Promises hjälper till att eliminera callback hell genom att kedja .then()-metoder.

1. Vad är en callback-funktion?

2. Vad är "callback hell"?

question mark

Vad är en callback-funktion?

Select the correct answer

question mark

Vad är "callback hell"?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2
some-alt