Async Await

Error Handling - Finally

by kulimusoda

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div class="order">
<p>尊貴的客戶您好,您上次的消費內容是:</p>
  <p>訂單編號:<span id="order_id"></span></p>
  <p>訂單內容:<span id="order_content"></span></p>
  <p>訂單金額:$<span id="order_amount"></span></p>
  <p>希望這次也能有機會服務您!</p>
</div>

<div class="overlay">
  <div class="loading">
    <div class="loading-icon"></div>
    <div class="loading-text">讀取中,請稍等...</div>
  </div>
</div>

SCSS

.overlay{
  display:none;
  position:absolute;
  inset:0;
  backdrop-filter:blur(10px);
  &.active{
    display: grid;
    place-items:center;
  }
}

.loading{
  display:grid;
  gap:0.5rem;
  &-icon{
    border:5px solid;
    border-color: #eee #aaa #aaa #aaa;
    width: 32px;
    height: 32px;
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    border-radius: 50%;
    justify-self:center;
    animation: 800ms loading linear infinite;
  }
}

@keyframes loading {
  from{
    transform: rotate(0deg);
  }
  to{
    transform: rotate(360deg);
  }
}

JavaScript

const userApi = 'https://codelove.tw/fake-api/get-current-user-unstable';
const orderApi = 'https://codelove.tw/fake-api/get-orders-unstable';
const detailApi = 'https://codelove.tw/fake-api/get-order-details-unstable';


/* const main = async () => {
  try {
  const data1 = await $.get(userApi);
  const user_id = data1.data.user.id;
  console.log(user_id);
  
  const data2 = await $.get(orderApi,{user_id});
  const order_id = data2.data.orders.at(-1).id;
  console.log(order_id);
  
  const data3 = await $.get(detailApi,{order_id});
  
  $('#order_id').text(data3.data.order.id);
  $('#order_content').text(data3.data.order.content);
  $('#order_amount').text(data3.data.order.amount);
  } catch (err) {
    alert('抱歉,系統出了點問題,請稍後再試一次。');
  }
}

main(); */

async function getOrderData() {

  const overlay = $('.overlay');
  overlay.addClass('active');

  try {
    const data1 = await $.get(userApi);
    const user_id = data1.data.user.id;

    const data2 = await $.get(orderApi, {
      user_id
    });
    const order_id = data2.data.orders.at(-1).id;

    const data3 = await $.get(detailApi, {
      order_id
    });
    const {
      id,
      content,
      amount
    } = data3.data.order;

    $('#order_id').text(id);
    $('#order_content').text(content);
    $('#order_amount').text(amount);
  } catch (err) {
    alert('抱歉,系統出了點問題,請稍後再試一次。')
  } finally{
    overlay.removeClass('active');
  }
}

document.addEventListener('DOMContentLoaded',getOrderData);