Selamlar,
Async JS'ye dair kısa bir pratik uygulaması geliştiriyorum. Mantık şu:
Müşteri restorana girerken bir isim, şifre ve sipariş adı veriyor.
Daha sonra siparisVer metodu ile bu siparis veriliyor.
En sonda ise sipariş detayları gösteriliyor. ID, müşteri ismi vs.

Kod aşağıda:
        // RESTORAN ÖRNEĞİ
        let restoranDurumu = true;
        let restoranaGir = (firstName, password, order) => {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    if(restoranDurumu) {
                        resolve( {customerName: firstName, orderName: order} );
                    } else {
                        reject("Restoran kapalı");
                    }
                }, 2000);
            });
        }
        let siparisVer = (customerName, orderName) => {
            return new Promise((resolve, reject) => {
                let siparisNo = Math.random() * 11;
                setTimeout(() => {
                    resolve("Sayın " + customerName + ", bir adet " + orderName + " isimli siparişiniz hazırlandı.");
                }, 2000);
            });
        }
        let siparisDetaylari = (siparisNo) => {
            return Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(
                        `Customer Name: ${customerName}`
                        `Order ID: ${siparisNo}`
                        `Order Name: ${orderName}`
                    );
                }, 2000);
            });
        }
        restoranaGir("Alperen", 12345, "Büyük Boy Pizza")
            .then((customerName, orderName) => {
                console.log("Restorana Girildi");
                console.log(customerName);
                return siparisVer(customerName, orderName);
            }).then(order => {
                console.log(order);
                return siparisDetaylari(siparisNo);
            }).then(details => {
                console.log(details);
            });
Aldığım hatalar şunlar:

1. siparisVer metodu çalıştığı zaman resolve içinde ki değişkenlere ulaşılamıyor.
2. siparisVer metodu içinde oluşturulan siparisNo değişkenini, siparisDetaylari isimli metoda aktaramadım. Promise yapısı içerisinde bu sorun daha net anlaşılır.

Teşekkürler.