بازگشت به درس

بازنویسی با استفاده از async/await

مثال کد زیر از بخش زنجیره‌ای کردن Promise با استفاده از async/await بجای then/catch. بازنویسی کنید:

function loadJson(url) {
  return fetch(url)
    .then(response => {
      if (response.status == 200) {
        return response.json();
      } else {
        throw new Error(response.status);
      }
    });
}

loadJson('https://javascript.info/no-such-user.json')
  .catch(alert); // Error: 404

نکات پایین کد قرار دارند:

async function loadJson(url) { // (1)
  let response = await fetch(url); // (2)

  if (response.status == 200) {
    let json = await response.json(); // (3)
    return json;
  }

  throw new Error(response.status);
}

loadJson('https://javascript.info/no-such-user.json')
  .catch(alert); // Error: 404 (4)

نکات:

۱. تابع loadJson به async تغییر کرد.

۲. تمام then. ها با await جایگزین شده اند.

۳. ما می توانیم بجای صبر کردن برای نتیجه، مستقیما آن return response.json() را برگردانیم؛ مانند زیر:

```js
if (response.status == 200) {
  return response.json(); // (3)
}
```

بنابراین کد بیرونی باید برای اجرا شدن Promise از `await` استفاده کند. در مثال ما خیلی اهمیت ندارد.

۵. خطای ایجاد شده از loadJson توسط catch. مدیریت می شود. ما نمی توانیم به صورت (...)await loadJson استفاده کنیم، زیرا ما در هیچ تابع async ای نیستیم.