• 27-08-2023, 22:57:51
    #1
    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.
  • 28-08-2023, 00:05:43
    #2
    Sorunun çözülmüş hali aşağıdadır hocam.
    Gerekli parametreleri, resolve içerisinde json formatında gönderirseniz, then fonksiyonu içerisinde yakalayıp, gönderilen parametrelere ulaşabilirsiniz.

            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({
                            message: "Sayın " + customerName + ", bir adet " + orderName + " isimli siparişiniz hazırlandı.", 
                            siparisNo:siparisNo,
                            customerName: customerName,
                            orderName: orderName
                        });
                    }, 2000);
                });
            }
            let siparisDetaylari = (siparisNo, customerName, orderName) => {
                return new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve({
                            customerName: customerName,
                            siparisNo: siparisNo,
                            orderName: orderName
                        })
                    }, 2000);
                });
            }
            restoranaGir("Alperen", 12345, "Büyük Boy Pizza")
                .then((detail) => {
                    console.log("Restorana Girildi");
                    console.log(detail.customerName);
                    return siparisVer(detail.customerName, detail.orderName);
                }).then(order => {
                    console.log(order.message);
                    return siparisDetaylari(order.siparisNo, order.customerName, order.orderName);
                }).then(details => {
                    console.log(details);
                });
  • 28-08-2023, 09:30:22
    #3
    sahinbey adlı üyeden alıntı: mesajı görüntüle
    Sorunun çözülmüş hali aşağıdadır hocam.
    Gerekli parametreleri, resolve içerisinde json formatında gönderirseniz, then fonksiyonu içerisinde yakalayıp, gönderilen parametrelere ulaşabilirsiniz.

            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({
                            message: "Sayın " + customerName + ", bir adet " + orderName + " isimli siparişiniz hazırlandı.",
                            siparisNo:siparisNo,
                            customerName: customerName,
                            orderName: orderName
                        });
                    }, 2000);
                });
            }
            let siparisDetaylari = (siparisNo, customerName, orderName) => {
                return new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve({
                            customerName: customerName,
                            siparisNo: siparisNo,
                            orderName: orderName
                        })
                    }, 2000);
                });
            }
            restoranaGir("Alperen", 12345, "Büyük Boy Pizza")
                .then((detail) => {
                    console.log("Restorana Girildi");
                    console.log(detail.customerName);
                    return siparisVer(detail.customerName, detail.orderName);
                }).then(order => {
                    console.log(order.message);
                    return siparisDetaylari(order.siparisNo, order.customerName, order.orderName);
                }).then(details => {
                    console.log(details);
                });
    Teşekkür ederim hocam
    • sahinbey
    sahinbey bunu beğendi.
    1 kişi bunu beğendi.