แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— Async/Wait in JavaScript-แƒจแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒก Async/Wait-แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒก JavaScript-แƒจแƒ˜. แƒกแƒแƒ”แƒ แƒ—แƒ แƒฏแƒแƒ›แƒจแƒ˜, Async/Await แƒแƒ แƒ˜แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ–แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“. แƒกแƒแƒœแƒแƒ› แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒแƒ“แƒ, แƒแƒกแƒ”แƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒแƒ“แƒ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒแƒ•แƒšแƒ”แƒœแƒก Async/Await-แƒ˜แƒก แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ˜แƒ—.

แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—: "Habr"-แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ 10 แƒ แƒฃแƒ‘แƒšแƒ˜แƒ“แƒแƒœ Skillbox-แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ™แƒฃแƒ แƒกแƒ–แƒ” แƒฉแƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒกแƒแƒก "Habr" แƒกแƒแƒ แƒ”แƒ™แƒšแƒแƒ›แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—: แƒกแƒแƒ’แƒแƒœแƒ›แƒแƒœแƒแƒ—แƒšแƒ”แƒ‘แƒšแƒ แƒแƒœแƒšแƒแƒ˜แƒœ แƒ™แƒฃแƒ แƒกแƒ˜ "แƒฏแƒแƒ•แƒแƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜".

แƒ’แƒแƒ“แƒ›แƒแƒ แƒ”แƒ™แƒ”

แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ–แƒแƒ แƒ˜ แƒ“แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ˜ แƒ•แƒแƒ“แƒ˜แƒ—. แƒแƒ“แƒ แƒ”, แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ˜แƒ› แƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ•แƒ”แƒ  แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ“แƒ.

แƒแƒฅ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ Node.js-แƒจแƒ˜:

fs.readFile(__filename, 'utf-8', (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
});

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ. แƒฌแƒแƒ แƒ›แƒแƒ•แƒ˜แƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒ”แƒก แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜: แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒฎแƒ“แƒ”แƒ‘แƒ Arfat-แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ›แƒ˜แƒกแƒ˜ profile_img_url แƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒกแƒฃแƒ แƒแƒ—แƒ˜ Someserver.com แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ.
แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒฃแƒ แƒแƒ—แƒก แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒงแƒ•แƒแƒœแƒ— แƒกแƒฎแƒ•แƒ แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ PNG-แƒ“แƒแƒœ JPEG-แƒจแƒ˜. แƒ—แƒฃ แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒชแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ, แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ”แƒš.แƒคแƒแƒกแƒขแƒแƒ–แƒ”. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒจแƒ”แƒ˜แƒขแƒแƒœแƒ”แƒ‘แƒ transformations.log แƒคแƒแƒ˜แƒšแƒจแƒ˜, แƒ—แƒแƒ แƒ˜แƒฆแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒ—.

แƒฆแƒ˜แƒ แƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฎแƒฃแƒ แƒ•แƒแƒ–แƒ” แƒ“แƒ })-แƒ˜แƒก แƒ“แƒ˜แƒ“ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒ–แƒ” แƒ™แƒแƒ“แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒœแƒแƒฌแƒ˜แƒšแƒจแƒ˜. แƒ›แƒแƒก แƒฐแƒฅแƒ•แƒ˜แƒ Callback Hell แƒแƒœ Pyramid of Doom.

แƒแƒ› แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜ แƒแƒจแƒ™แƒแƒ แƒแƒ:

  • แƒแƒ› แƒ™แƒแƒ“แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ.
  • แƒแƒกแƒ”แƒ•แƒ” แƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ—แƒแƒœ แƒ’แƒแƒ›แƒ™แƒšแƒแƒ•แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒชแƒฃแƒ“ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒก.

แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“ JavaScript-แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒฆแƒ แƒ›แƒ แƒ‘แƒฃแƒ“แƒ” แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒ— .แƒ›แƒแƒจแƒ˜แƒœ.

แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒกแƒžแƒ”แƒฅแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ™แƒแƒ“แƒก แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒ™แƒ”แƒ— แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ”แƒœ, แƒ–แƒ”แƒ›แƒแƒ“แƒแƒœ แƒฅแƒ•แƒ”แƒ›แƒแƒ“แƒแƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ“แƒแƒœ แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ•. แƒ—แƒฃแƒ›แƒชแƒ, แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜:

  • แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ‘แƒ”แƒ•แƒ แƒ˜ .แƒ›แƒแƒจแƒ˜แƒœ.
  • try/catch-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, .catch แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒแƒกแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒšแƒแƒ“.
  • แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜; แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ”แƒœ แƒ™แƒแƒ“แƒก.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ‘แƒแƒšแƒ แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก.

แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒ’แƒ•แƒแƒฅแƒ•แƒก for loop, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ‘แƒ”แƒญแƒ“แƒแƒ•แƒก แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒแƒก 0-แƒ“แƒแƒœ 10-แƒ›แƒ“แƒ” แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒ— (0โ€“n แƒฌแƒแƒ›แƒ˜). แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ”แƒก แƒชแƒ˜แƒ™แƒšแƒ˜ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ˜แƒ‘แƒ”แƒญแƒ“แƒแƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ— 0-แƒ“แƒแƒœ 10-แƒ›แƒ“แƒ”. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒœแƒฃแƒšแƒ˜แƒก แƒ“แƒแƒ‘แƒ”แƒญแƒ“แƒ•แƒแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ 6 แƒฌแƒแƒ›แƒ˜ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜แƒก แƒ“แƒแƒ‘แƒ”แƒญแƒ“แƒ•แƒแƒก 2 แƒฌแƒแƒ›แƒ˜, แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒ‘แƒ”แƒญแƒ“แƒแƒก แƒœแƒฃแƒšแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜. แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒแƒ—แƒ•แƒšแƒ แƒ”แƒ แƒ—แƒ˜แƒก แƒ“แƒแƒกแƒแƒ‘แƒ”แƒญแƒ“แƒแƒ“.

แƒ“แƒ แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒกแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Async/Wait แƒแƒœ .sort-แƒก. แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒšแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒแƒ แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก.

แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜

Async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ ES2017-แƒจแƒ˜ (ES8) แƒ’แƒแƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ. แƒ›แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•, แƒ แƒแƒ› แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก "แƒ–แƒ”แƒ“แƒแƒ–แƒ”". แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ  แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ—แƒ•แƒ˜แƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒš แƒชแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก. Async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒ˜แƒ–แƒœแƒฃแƒšแƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒ“แƒ˜แƒก แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒก.

Async/Await แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒแƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒš แƒกแƒขแƒ˜แƒšแƒจแƒ˜.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒชแƒแƒ“แƒœแƒ แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก Async/Wait-แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒแƒก.

แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ˜แƒ’แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒกแƒ’แƒแƒœ: แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ“แƒ แƒ“แƒแƒ”แƒšแƒแƒ“แƒ”. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒแƒฅแƒชแƒ”แƒ•แƒก. แƒแƒกแƒ”แƒ—แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก. แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒกแƒฎแƒ•แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก.

// With function declaration
 
async function myFn() {
  // await ...
}
 
// With arrow function
 
const myFn = async () => {
  // await ...
}
 
function myFn() {
  // await fn(); (Syntax Error since no async)
}
 

Async แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ“แƒ”แƒ™แƒšแƒแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜, แƒฎแƒแƒšแƒ แƒ˜แƒกแƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, "=" แƒœแƒ˜แƒจแƒแƒœแƒกแƒ แƒ“แƒ แƒคแƒ แƒฉแƒฎแƒ˜แƒšแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก.

แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒแƒก แƒ™แƒšแƒแƒกแƒ˜แƒก แƒ“แƒ”แƒ™แƒšแƒแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜.

// As an object's method
 
const obj = {
  async getName() {
    return fetch('https://www.example.com');
  }
}
 
// In a class
 
class Obj {
  async getResource() {
    return fetch('https://www.example.com');
  }
}

NB! แƒฃแƒœแƒ“แƒ แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒก, แƒ แƒแƒ› แƒ™แƒšแƒแƒกแƒ˜แƒก แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜/แƒ“แƒแƒ›แƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜.

แƒกแƒ”แƒ›แƒแƒœแƒขแƒ˜แƒ™แƒ แƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜

Async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ JS แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ”แƒ‘แƒ˜.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒก:

async function fn() {
  return 'hello';
}
fn().then(console.log)
// hello

แƒ™แƒ”แƒ แƒซแƒแƒ“, fn แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก hello. แƒ™แƒแƒ แƒ’แƒแƒ“, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒ, แƒกแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒจแƒ”แƒคแƒฃแƒ—แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜ Async-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”:

function fn() {
  return Promise.resolve('hello');
}
 
fn().then(console.log);
// hello

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ "แƒฎแƒ”แƒšแƒ˜แƒ—". แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒฎแƒแƒš แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜แƒ แƒ’แƒแƒฎแƒ•แƒ”แƒฃแƒšแƒ˜.

แƒ—แƒฃ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒžแƒ แƒ˜แƒ›แƒ˜แƒขแƒ˜แƒฃแƒšแƒ˜, async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ˜แƒ—. แƒ—แƒฃ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜, แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒแƒ“แƒแƒ‘แƒ แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒแƒฎแƒแƒš แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜.

const p = Promise.resolve('hello')
p instanceof Promise;
// true
 
Promise.resolve(p) === p;
// true
 

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ?

async function foo() {
  throw Error('bar');
}
 
foo().catch(console.log);

แƒ—แƒฃ แƒ˜แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜, foo() แƒฃแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—. แƒแƒ› แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒจแƒ˜, Promise.reject, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก, แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ Promise.resolve-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“.

Async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒซแƒšแƒ”แƒ•แƒ”แƒœ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ—แƒฃ แƒ แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ.

แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก.

แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒ˜ แƒ’แƒแƒ•แƒšแƒ”แƒœแƒแƒก แƒแƒฎแƒ“แƒ”แƒœแƒก แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ–แƒ”. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ แƒแƒ แƒ˜แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ, แƒแƒกแƒ˜แƒœแƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒ—แƒฃ แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒ“ Promise.resolve-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ.

// utility function to cause delay
// and get random value
 
const delayAndGetRandom = (ms) => {
  return new Promise(resolve => setTimeout(
    () => {
      const val = Math.trunc(Math.random() * 100);
      resolve(val);
    }, ms
  ));
};
 
async function fn() {
  const a = await 9;
  const b = await delayAndGetRandom(1000);
  const c = await 5;
  await delayAndGetRandom(1000);
 
  return a + b * c;
}
 
// Execute fn
fn().then(console.log);

แƒ“แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก fn แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ.

  • แƒ“แƒแƒ แƒ”แƒ™แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒฎแƒแƒ–แƒ˜ แƒ’แƒแƒ แƒ“แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ const a = await 9-แƒ“แƒแƒœ; in const a = แƒ•แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ Promise.resolve(9);.
  • Await-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› a แƒแƒ  แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก (แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒแƒ แƒ˜แƒก 9).
  • delayAndGetRandom(1000) แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒก fn แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก, แƒกแƒแƒœแƒแƒ› แƒ˜แƒก แƒแƒ  แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ (1 แƒฌแƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’). แƒ”แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ“ แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒก fn แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก 1 แƒฌแƒแƒ›แƒ˜แƒ—.
  • delayAndGetRandom(1000) via solution แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ b แƒชแƒ•แƒšแƒแƒ“แƒก.
  • แƒ˜แƒกแƒ”, c แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ a แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒกแƒ. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ แƒฌแƒแƒ›แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ delayAndGetRandom(1000) แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ.
  • แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒ—แƒ•แƒšแƒ”แƒ‘แƒ แƒคแƒแƒ แƒ›แƒฃแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— a + b * c. แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒจแƒ”แƒคแƒฃแƒ—แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜ Promise.resolve-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ—.

แƒ”แƒก แƒžแƒแƒฃแƒ–แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ— แƒ’แƒ”แƒœแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒก ES6-แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ แƒแƒฆแƒแƒช แƒแƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ”แƒ‘แƒ˜.

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒ

แƒ™แƒแƒ แƒ’แƒแƒ“, แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ–แƒ”แƒ›แƒแƒ— แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒแƒก.

finishMyTask แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก Await-แƒก, แƒ แƒแƒ—แƒ แƒ“แƒแƒ”แƒšแƒแƒ“แƒแƒก แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ queryDatabase, sendEmail, logTaskInFile แƒ“แƒ แƒกแƒฎแƒ•แƒ. แƒ—แƒฃ แƒแƒ› แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒแƒก แƒจแƒ”แƒ•แƒแƒ“แƒแƒ แƒ”แƒ‘แƒ— แƒ˜แƒ›แƒแƒก, แƒกแƒแƒ“แƒแƒช แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒแƒจแƒ™แƒแƒ แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ. แƒ—แƒฃแƒ›แƒชแƒ, Async/Await แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒฃแƒ  แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฏแƒแƒญแƒ•แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ .then/.catch.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒ—, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜.

const wait = (i, ms) => new Promise(resolve => setTimeout(() => resolve(i), ms));
 
// Implementation One (Using for-loop)
const printNumbers = () => new Promise((resolve) => {
  let pr = Promise.resolve(0);
  for (let i = 1; i <= 10; i += 1) {
    pr = pr.then((val) => {
      console.log(val);
      return wait(i, Math.random() * 1000);
    });
  }
  resolve(pr);
});
 
// Implementation Two (Using Recursion)
 
const printNumbersRecursive = () => {
  return Promise.resolve(0).then(function processNextPromise(i) {
 
    if (i === 10) {
      return undefined;
    }
 
    return wait(i, Math.random() * 1000).then((val) => {
      console.log(val);
      return processNextPromise(i + 1);
    });
  });
};

แƒ“แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

async function printNumbersUsingAsync() {
  for (let i = 0; i < 10; i++) {
    await wait(i, Math.random() * 1000);
    console.log(i);
  }
}

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ

แƒ“แƒแƒฃแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒš แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜แƒ แƒ’แƒแƒฎแƒ•แƒ”แƒฃแƒšแƒ˜. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒš แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒœ try/catch แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒ›แƒแƒกแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒšแƒแƒ“.

async function canRejectOrReturn() {
  // wait one second
  await new Promise(res => setTimeout(res, 1000));
 
// Reject with ~50% probability
  if (Math.random() > 0.5) {
    throw new Error('Sorry, number too big.')
  }
 
return 'perfect number';
}

canRejectOrReturn() แƒแƒ แƒ˜แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒœ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก (โ€žแƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜โ€œ) แƒแƒœ แƒ›แƒแƒ แƒชแƒฎแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— (โ€žแƒ‘แƒแƒ“แƒ˜แƒจแƒ˜, แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜แƒโ€œ).

async function foo() {
  try {
    await canRejectOrReturn();
  } catch (e) {
    return 'error caught';
  }
}

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ›แƒแƒ”แƒšแƒ˜แƒก canRejectOrReturn-แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก, แƒ›แƒ˜แƒกแƒ˜แƒ•แƒ” แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก catch แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ foo แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ˜ (แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ try แƒ‘แƒšแƒแƒ™แƒจแƒ˜) แƒแƒœ แƒ“แƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ—. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒ  แƒฉแƒแƒ•แƒแƒ แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ try/catch แƒ—แƒแƒ•แƒแƒ“ แƒ’แƒแƒฃแƒ›แƒ™แƒšแƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก foo.

แƒแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

async function foo() {
  try {
    return canRejectOrReturn();
  } catch (e) {
    return 'error caught';
  }
}

แƒฆแƒ˜แƒ แƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒแƒ— แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒก, แƒ แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, canRejectOrReturn แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ foo-แƒ“แƒแƒœ. Foo แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒœ แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒ แƒฃแƒšแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ— แƒแƒœ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก (โ€žแƒ‘แƒแƒ“แƒ˜แƒจแƒ˜, แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜แƒโ€œ). แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ˜ แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ.

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› foo แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก canRejectOrReturn-แƒ“แƒแƒœ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ foo แƒฎแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ canRejectOrReturn. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ แƒ˜ แƒฎแƒแƒ–แƒ˜แƒกแƒ’แƒแƒœ:

try {
    const promise = canRejectOrReturn();
    return promise;
}

แƒแƒ˜, แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒก แƒ“แƒ แƒ”แƒ แƒ—แƒแƒ“ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ˜แƒ—:

async function foo() {
  try {
    return await canRejectOrReturn();
  } catch (e) {
    return 'error caught';
  }
}

แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ™แƒแƒ“แƒจแƒ˜, foo แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒ แƒฃแƒšแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒœแƒแƒ›แƒ แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ—. แƒแƒฅ แƒฃแƒแƒ แƒ˜ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› foo แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ canRejectOrReturn-แƒ˜แƒ— แƒ“แƒ แƒแƒ แƒ แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ˜แƒ—. แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ— แƒแƒ›แƒแƒจแƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก await canRejectOrReturn() แƒฎแƒแƒ–แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ˜แƒ—:

try {
    const value = await canRejectOrReturn();
    return value;
}
// โ€ฆ

แƒกแƒแƒ”แƒ แƒ—แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ”แƒ‘แƒ˜

แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, Async/Await-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒแƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜.

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ

แƒ”แƒก แƒฎแƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ - แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒ›แƒ“แƒ”:

async function foo() {
  try {
    canRejectOrReturn();
  } catch (e) {
    return 'caught';
  }
}

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ™แƒแƒ“แƒจแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒšแƒแƒ“แƒ˜แƒœแƒ˜ แƒแƒœ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒขแƒแƒ› foo แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ˜แƒ— 1 แƒฌแƒแƒ›แƒ˜แƒก แƒ“แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ. แƒ—แƒฃ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒœ แƒฃแƒแƒ แƒงแƒแƒคแƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ UnhandledPromiseRejectionWarning.

แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ”แƒ‘แƒจแƒ˜

Async แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ .map-แƒจแƒ˜ แƒแƒœ .filter-แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ fetchPublicReposCount(username) แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก GitHub-แƒ–แƒ” แƒฆแƒ˜แƒ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก. แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒแƒ แƒ˜แƒก แƒกแƒแƒ›แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒแƒ› แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

const url = 'https://api.github.com/users';
 
// Utility fn to fetch repo counts
const fetchPublicReposCount = async (username) => {
  const response = await fetch(`${url}/${username}`);
  const json = await response.json();
  return json['public_repos'];
}

แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ ArfatSalman, octocat, norvig แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ—:

const users = [
  'ArfatSalman',
  'octocat',
  'norvig'
];
 
const counts = users.map(async username => {
  const count = await fetchPublicReposCount(username);
  return count;
});

แƒฆแƒ˜แƒ แƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒแƒ— Await-แƒก .แƒ แƒฃแƒฅแƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒแƒจแƒ˜. แƒแƒฅ แƒ˜แƒ—แƒ•แƒšแƒ˜แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜ แƒ“แƒ .map แƒแƒ แƒ˜แƒก แƒแƒœแƒแƒœแƒ˜แƒ›แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒแƒ“ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

async function fetchAllCounts(users) {
  const counts = [];
  for (let i = 0; i < users.length; i++) {
    const username = users[i];
    const count = await fetchPublicReposCount(username);
    counts.push(count);
  }
  return counts;
}

แƒแƒฅ แƒ แƒ”แƒžแƒ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ count แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒก แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ counts แƒ›แƒแƒกแƒ˜แƒ•แƒก. แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒแƒœแƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ›แƒแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ, แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“.

แƒ—แƒฃ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 300 ms, แƒ›แƒแƒจแƒ˜แƒœ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒฃแƒ™แƒ•แƒ” แƒ›แƒ”แƒแƒ แƒ”แƒ; แƒ“แƒแƒฎแƒแƒ แƒฏแƒฃแƒšแƒ˜ แƒ“แƒ แƒ แƒฎแƒแƒ–แƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒ–แƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ แƒ”แƒžแƒแƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ–แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒ˜แƒ–แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. แƒ”แƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก .map-แƒ—แƒแƒœ แƒ“แƒ Promise.all-แƒ—แƒแƒœ:

async function fetchAllCounts(users) {
  const promises = users.map(async username => {
    const count = await fetchPublicReposCount(username);
    return count;
  });
  return Promise.all(promises);
}

Promise.all แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒ”แƒš แƒ แƒ˜แƒ’แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒแƒก. แƒ”แƒก แƒฃแƒ™แƒแƒœแƒแƒกแƒ™แƒœแƒ”แƒšแƒ˜ แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒœ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒฃแƒแƒ แƒงแƒแƒคแƒแƒ–แƒ”, แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒแƒ  แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก - แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒ— แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— p-map.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒกแƒฃแƒš แƒฃแƒคแƒ แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒกแƒ”, แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ“แƒแƒžแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ˜แƒขแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜. JavaScript-แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ”แƒ แƒ™แƒ•แƒ”แƒแƒ“แƒ”แƒก แƒแƒ›แƒแƒจแƒ˜.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ