Çözüldü JavaScript await ve async nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

BreaKSooN05

Kilopat
Katılım
17 Şubat 2019
Mesajlar
4.799
Çözümler
19
Arkadaşlar, bu konuyu YT Proturk'ten ve yabancı bir kanaldan dinledim. Hiç anlamadım bunun başlangıç konusu promise imiş onu da Proturk'ten izledim. Ama yine anlamadım. Şu an kafam hiç almıyor salağa anlatır gibi anlatan bir kanal var mı?

Bu konu önemli anladığım kadarıyla neden kullanıldığını anlıyorum ancak kullanamıyorum.


=> Bu attığım en basit örnektir herhalde bunu bile yapamıyorum. 2-3 farklı web sitesinde inceledim herkes farklı tarzlarda yapmış. Kafam çok karıştı.
 
Son düzenleyen: Moderatör:
Çözüm
Verdiğin örnek çalışıyor ama 'setTimeout' içindekilerin çalışmasını beklemiyor. Çalıştırılıyor ve koda devam ediyor, ne kadar süre sonra içindekilerin çalışmasını istediysen o zaman da içindekiler çalışıyor. Async, await kullanmak için önce "Promise"lere bakman gerek. Onu da söz vermek olarak düşünebilirsin. Çalıştırdığın zaman geriye bir değer döndürür. Koduna göre beklenen ve beklenmeyen durumlarda ne olacağına karar verebilirsin. "resolve" metoduyla beklenen durumları, "reject" ile de beklenmeyenleri karşılayabilirsin. "reject" çalıştığında bir hata gönderir, "catch" kullanarak hata durumunda olacakları kontrol edebilirsin. Aşağıdaki örneklerde "resolve" ile "reject" satırlarının yerini değiştirerek deneyebilirsin. "resolve, reject" isimleri yerine istediğini kullanabilirsin(değişken kurallarıyla uyumlu olacak şekilde) ama sıralaması önemli(Promise((resolve, reject) => {}), Promise((basarili, basarisiz) => {}) vb.).
JavaScript:
function one() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Başarılı");
            reject("Promise: Reject");
        }, 2500)
    })
}

function two() {
    console.log("iki");
}

async function test() {
    try {
        console.log("test çalıştı");
        const data = await one();
        console.log(data);
        two();
    } catch (e) {
        console.log("Hata: ", e);
    }
}

test();
JavaScript:
function one() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Başarılı");
            reject("Promise: Reject");
        }, 2500)
    })
}

function two() {
    console.log("iki");
}

async function test() {
        console.log("test çalıştı");
        await one().then((data) => {
            console.log(data);
        }).catch((err) => {
            console.log(err);
        });
        two();
}

test();
Arkadaşlar, bu konuyu YT Proturk'ten ve yabancı bir kanaldan dinledim. Hiç anlamadım bunun başlangıç konusu promise imiş onu da Proturk'ten izledim. Ama yine anlamadım. Şu an kafam hiç almıyor salağa anlatır gibi anlatan bir kanal var mı?

Bu konu önemli anladığım kadarıyla neden kullanıldığını anlıyorum ancak kullanamıyorum.


=> Bu attığım en basit örnektir herhalde bunu bile yapamıyorum. 2-3 farklı web sitesinde inceledim herkes farklı tarzlarda yapmış. Kafam çok karıştı.

JavaScript:
function one() {
    setTimeout(() => {
        console.log("zaman bitti");
    }, 2500);
}

function two() {
    console.log("iki")
}

function test() {
    console.log("test çalıştı");
    one();
    two();
}

test();

Yukarıdaki kodu çalıştırdığımızda "one" isimli fonksiyon çalışıyor ve "setTimeout" ile beraber 2.5 saniye bekledikten sonra "zaman bitti" yazıyor konsola. 2.5 saniye bittikten sonra "two" isimli fonksiyon çalışıyor ve konsola "iki" yazıyor. Yani program işin bitmesini bekliyor. Konsol çıktısı şu şekilde olur;
- "test çalıştı"
- "zaman bitti"
- "iki"

JavaScript:
function one() {
    setTimeout(() => {
        console.log("zaman bitti");
    }, 2500);
}

function two() {
    console.log("iki")
}

async function test() {
    console.log("test çalıştı");
    await one();
    two();
}

test();

Eğer bu şekilde async/await kullanırsanız program "one" isimli fonksiyonun işini bitirmesini beklemez ve devam eder. Konsol çıktısı şu şekilde olur;
- "test çalıştı"
- "iki"
- "zaman bitti"

  • Await kullanmak için Async bir fonksiyonda olmanız gerekiyor vanilla Javascriptte.
  • Async/Await genel olarak diğer sitelerden veri çekmek istediğimizde kullanılıyor.
Yanlışım olabilir kendi bildiğim kadarınca anlatmaya çalıştım.

Prototurk önermem. Devletin kendi sitesi olan Btk Akademi baya iyidir, kimlik bilgisi falan isterse de güvenli.
Hocam prototurk neden önermediniz? Ben içeriklerini yararlı buluyorum açıkçası.
 
JavaScript:
function one() {
 setTimeout(() => {
 console.log("zaman bitti");
 }, 2500);
}

function two() {
 console.log("iki")
}

function test() {
 console.log("test çalıştı");
 one();
 two();
}

test();

Yukarıdaki kodu çalıştırdığımızda "One" isimli fonksiyon çalışıyor ve "setTimeout" ile beraber 2.5 saniye bekledikten sonra "zaman bitti" yazıyor konsola. 2.5 saniye bittikten sonra "two" isimli fonksiyon çalışıyor ve konsola "iki" yazıyor. Yani program işin bitmesini bekliyor. Konsol çıktısı şu şekilde olur;
- "Test çalıştı"
- "Zaman bitti"
- "İki"

JavaScript:
function one() {
 setTimeout(() => {
 console.log("zaman bitti");
 }, 2500);
}

function two() {
 console.log("iki")
}

async function test() {
 console.log("test çalıştı");
 await one();
 two();
}

test();

Eğer bu şekilde async/await kullanırsanız program "One" isimli fonksiyonun işini bitirmesini beklemez ve devam eder. Konsol çıktısı şu şekilde olur;
- "Test çalıştı"
- "İki"
- "Zaman bitti"

  • Await kullanmak için Async bir fonksiyonda olmanız gerekiyor vanilla JavaScript'te.
  • Async/Await genel olarak diğer sitelerden veri çekmek istediğimizde kullanılıyor.
Yanlışım olabilir kendi bildiğim kadarınca anlatmaya çalıştım.

Hocam prototurk neden önermediniz? Ben içeriklerini yararlı buluyorum açıkçası.

Açıklamalarınız için çok teşekkür ederim.

Prototurk çok üstün körü ve hızlı geldi. Bir de kod yazım tarzı açıklayıcı değil. Sorun onda değil de benim acemiliğim. Mesela sizin anlatımınız daha sade ve öz. Şu an anladım.
 
Verdiğin örnek çalışıyor ama 'setTimeout' içindekilerin çalışmasını beklemiyor. Çalıştırılıyor ve koda devam ediyor, ne kadar süre sonra içindekilerin çalışmasını istediysen o zaman da içindekiler çalışıyor. Async, await kullanmak için önce "Promise"lere bakman gerek. Onu da söz vermek olarak düşünebilirsin. Çalıştırdığın zaman geriye bir değer döndürür. Koduna göre beklenen ve beklenmeyen durumlarda ne olacağına karar verebilirsin. "resolve" metoduyla beklenen durumları, "reject" ile de beklenmeyenleri karşılayabilirsin. "reject" çalıştığında bir hata gönderir, "catch" kullanarak hata durumunda olacakları kontrol edebilirsin. Aşağıdaki örneklerde "resolve" ile "reject" satırlarının yerini değiştirerek deneyebilirsin. "resolve, reject" isimleri yerine istediğini kullanabilirsin(değişken kurallarıyla uyumlu olacak şekilde) ama sıralaması önemli(Promise((resolve, reject) => {}), Promise((basarili, basarisiz) => {}) vb.).
JavaScript:
function one() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Başarılı");
            reject("Promise: Reject");
        }, 2500)
    })
}

function two() {
    console.log("iki");
}

async function test() {
    try {
        console.log("test çalıştı");
        const data = await one();
        console.log(data);
        two();
    } catch (e) {
        console.log("Hata: ", e);
    }
}

test();
JavaScript:
function one() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Başarılı");
            reject("Promise: Reject");
        }, 2500)
    })
}

function two() {
    console.log("iki");
}

async function test() {
        console.log("test çalıştı");
        await one().then((data) => {
            console.log(data);
        }).catch((err) => {
            console.log(err);
        });
        two();
}

test();
 
Çözüm
Verdiğin örnek çalışıyor ama 'setTimeout' içindekilerin çalışmasını beklemiyor. Çalıştırılıyor ve koda devam ediyor, ne kadar süre sonra içindekilerin çalışmasını istediysen o zaman da içindekiler çalışıyor. Async, await kullanmak için önce "Promise"lere bakman gerek. Onu da söz vermek olarak düşünebilirsin. Çalıştırdığın zaman geriye bir değer döndürür. Koduna göre beklenen ve beklenmeyen durumlarda ne olacağına karar verebilirsin. "Resolve" metoduyla beklenen durumları, "reject" ile de beklenmeyenleri karşılayabilirsin. "reject" çalıştığında bir hata gönderir, "catch" kullanarak hata durumunda olacakları kontrol edebilirsin. Aşağıdaki örneklerde "Resolve" ile "reject" satırlarının yerini değiştirerek deneyebilirsin. "Resolve, reject" isimleri yerine istediğini kullanabilirsin(değişken kurallarıyla uyumlu olacak şekilde) ama sıralaması önemli(Promise((Resolve, reject) => {}), Promise((basarili, basarisiz) => {}) vb.).
JavaScript:
function one() {
 return new Promise((resolve, reject) => {
 setTimeout(() => {
 resolve("Başarılı");
 reject("Promise: Reject");
 }, 2500)
 })
}

function two() {
 console.log("iki");
}

async function test() {
 try {
 console.log("test çalıştı");
 const data = await one();
 console.log(data);
 two();
 } catch (e) {
 console.log("Hata: ", e);
 }
}

test();
JavaScript:
function one() {
 return new Promise((resolve, reject) => {
 setTimeout(() => {
 resolve("Başarılı");
 reject("Promise: Reject");
 }, 2500)
 })
}

function two() {
 console.log("iki");
}

async function test() {
 console.log("test çalıştı");
 await one().then((data) => {
 console.log(data);
 }).catch((err) => {
 console.log(err);
 });
 two();
}

test();

Hocam peki 1. örnekte then kullanmadınız. 2. örnekte kullandınız çıktı aynı oldu? Then'i neden kullanıyoruz?
Bir de await dediğimiz function çalışmayı bitirdikten sonra devam ediyor değil mi?
Yukarı da dediğiniz gibi SetTimeOut'un içindekiler çalışmadan aşağıda ki Function'u çalıştırmıştı. Bu bir hata mı?

Ben bu konuları hiç anlayamayacağım galiba :( tam anlar gibi oluyorum işe başka şeyler kafamı karıştırıyor.
 
Son düzenleme:
İlk örnekte "data" isimli bir değişkene "promise"ten dönen veriyi atıyoruz ve devamında onu kullanıyoruz, ikincisinde ise "then" metodu içine "promise"ten dönen değeri alıyor ve onun içinde kullanıyoruz, aralarında bir fark yok. İlk örnekteki kullanımda bir hata olursa kodun devamı çalışmıyor(tüm kodu "try" bloğu içine aldığım için), direkt olarak "catch" bloğuna atlıyor. İkincisinde ise "catch" içindeki kod çalıştıktan sonra kodu yürütmeye devam ediyor.

"setTimeout" metodunun içindekiler çalışmadan kodun yürütülmeye devam etmesi bir hata değil. İstenilen zaten kodun çalışması ama "setTimeout" içinde verilenlerin gecikmeli olarak çalıştırılması. "setTimeout" içindekiler çalıştırılmadan devam edilmesini istemiyorsan verdiğim örnekteki gibi "promise"leri kullanman gerekiyor.
 

Geri
Yukarı