/* Dengan promise kita dapat melakukan proses asynchronous operation
secara berantai. Contohnya, Ketika kita memesan kopi robusta,
maka tahapan yang dilalui oleh barista adalah memastikan biji kopi tersedia,
membuat kopi, lalu menghidangkannya kepada pelanggan.
Tahapan tersebut harus barista lakukan secara berurutan.
Contoh penerapannya:
*/
const state = {
isCofeeMakerReady: true,
seedStocks: {
arabica: 250,
robusta: 60,
liberica: 80
}
}
const getSeeds = (type, miligrams) => {
return new Promise((resolve, reject) => {
if(state.seedStocks[type] >= miligrams) {
state.seedStocks[type] -= miligrams;
resolve("Biji kopi didapatkan!")
}else{
reject("Maaf stock kopi habis!")
}
});
}
const makeCofee = seeds =>{
return new Promise((resolve, reject) =>{
if(state.isCofeeMakerReady){
resolve("kopi Berhasil dibuat")
} else {
reject("Maaf mesin kopi sedang tidak dapat digunakan")
}
})
}
const servingToTable = cofee => {
return new Promise(resolve => {
resolve("Pesanan kopi sudah selesai!")
})
}
function reserveACofee(type, miligrams){
getSeeds(type, miligrams)
.then(makeCofee)
.then(servingToTable)
.then(resolvedValue => {
console.log(resolvedValue);
})
.catch(rejectedReason => {
console.log(rejectedReason);
})
}
reserveACofee("liberica", 80);