āĻ†āĻ¸ā§āĻ¨ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ Async/Await āĻĻā§‡āĻ–ā§āĻ¨

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ˛ā§‡āĻ–āĻ• āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ Async/Await-āĻāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ•āĻ­āĻžāĻŦā§‡, Async/Await āĻšāĻ˛ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄ āĻ˛ā§‡āĻ–āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻŸāĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ†āĻ—ā§‡, āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§‹āĻĄ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻŽā§‚āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ˛ā§‡āĻ–āĻ• āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°ā§‡ Async/Await āĻāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤

āĻ†āĻŽāĻ°āĻž āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ: "Habr"-āĻāĻ° āĻ¸āĻ•āĻ˛ āĻĒāĻžāĻ āĻ•āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ - "Habr" āĻĒā§āĻ°āĻšāĻžāĻ°āĻŽā§‚āĻ˛āĻ• āĻ•ā§‹āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ Skillbox āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ āĻ¨āĻĨāĻŋāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ 10 āĻ°ā§āĻŦā§‡āĻ˛ āĻ›āĻžāĻĄāĻŧāĨ¤

Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°ā§‡: āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ—āĻ¤ āĻ…āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻ•ā§‹āĻ°ā§āĻ¸ "āĻœāĻžāĻ­āĻž āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°".

āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ•

āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯āĻžāĻ° āĻ•āĻ˛ āĻ…āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĻ•āĻžāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ˛āĻŽā§āĻŦāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻĒā§‚āĻ°ā§āĻŦā§‡, āĻ•ā§‹āĻĄā§‡āĻ° āĻ¸ā§‡āĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¤ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯ā§‡āĻ¤ āĻ¨āĻžāĨ¤

Node.js-āĻ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸āĻ­āĻžāĻŦā§‡ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻāĻ–āĻžāĻ¨ā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ˛:

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

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻĻā§‡āĻ–āĻž āĻĻā§‡āĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻāĻ‡ āĻĻā§ƒāĻļā§āĻ¯āĻŸāĻŋ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•: āĻ†āĻ°āĻĢāĻžāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻŸāĻŋāĻ° profile_img_url āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻŸāĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ someserver.com āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤
āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋāĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻŋ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ PNG āĻĨā§‡āĻ•ā§‡ JPEG-āĻ¤ā§‡āĨ¤ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§‡, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ‡āĻŽā§‡āĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ āĻŋ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ°āĻĒāĻ°ā§‡, āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ transformations.log āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ°āĻŋāĻ– āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡āĨ¤

āĻ•ā§‹āĻĄā§‡āĻ° āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ…āĻ‚āĻļā§‡ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ“āĻ­āĻžāĻ°āĻ˛ā§āĻ¯āĻžāĻĒ āĻāĻŦāĻ‚ } āĻāĻ° āĻŦāĻĄāĻŧ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨āĨ¤ āĻāĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻšā§‡āĻ˛ āĻŦāĻž āĻĒāĻŋāĻ°āĻžāĻŽāĻŋāĻĄ āĻ…āĻĢ āĻĄā§āĻŽāĨ¤

āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻŸ:

  • āĻāĻ‡ āĻ•ā§‹āĻĄ āĻĒāĻĄāĻŧāĻž āĻ•āĻ āĻŋāĻ¨.
  • āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ“ āĻ•āĻ āĻŋāĻ¨, āĻ¯āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻ•ā§‹āĻĄ āĻŽāĻžāĻ¨ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻļāĻŦā§āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ—āĻ­ā§€āĻ° āĻ¨ā§‡āĻ¸ā§āĻŸāĻŋāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ° āĻ‡āĻ¤āĻŋāĻŦāĻžāĻšāĻ• āĻĻāĻŋāĻ• āĻšāĻ˛ āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ•ā§‹āĻĄāĻŸāĻŋāĻ•ā§‡ āĻŦāĻžāĻŽ āĻĨā§‡āĻ•ā§‡ āĻĄāĻžāĻ¨ā§‡ āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ‰āĻĒāĻ°ā§‡ āĻĨā§‡āĻ•ā§‡ āĻ¨ā§€āĻšā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛ āĻĒāĻžāĻ āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ°āĻ“ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  • āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡. āĻ¤āĻžāĻ°āĻĒāĻ°.
  • āĻŸā§āĻ°āĻžāĻ‡/āĻ•ā§āĻ¯āĻžāĻšā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, .catch āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤
  • āĻāĻ• āĻ˛ā§āĻĒā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ¨āĻ¯āĻŧ; āĻ•āĻŋāĻ›ā§ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ¤āĻžāĻ°āĻž āĻ•ā§‹āĻĄāĻŸāĻŋāĻ•ā§‡ āĻœāĻŸāĻŋāĻ˛ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¯āĻž āĻļā§‡āĻˇ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ…āĻ°ā§āĻĨ āĻĻā§‡āĻ–āĻžāĻŦā§‡āĨ¤

āĻ§āĻ°ā§āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ˛ā§āĻĒ āĻ†āĻ›ā§‡ āĻ¯āĻž āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻŦāĻŋāĻ°āĻ¤āĻŋāĻ¤ā§‡ (0–n āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ) 10 āĻĨā§‡āĻ•ā§‡ 0 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ°āĻŽ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ‡ āĻ˛ā§āĻĒāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋ 0 āĻĨā§‡āĻ•ā§‡ 10 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ•ā§āĻ°āĻŽ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻļā§‚āĻ¨ā§āĻ¯ āĻŽā§āĻĻā§āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ 6 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ 2 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻļā§‚āĻ¨ā§āĻ¯āĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻĒā§āĻ°āĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§āĻĻā§āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ—āĻŖāĻ¨āĻž āĻļā§āĻ°ā§ āĻšāĻŦā§‡āĨ¤

āĻāĻŦāĻ‚ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Async/Await āĻŦāĻž .sort āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ āĻ¨āĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻļā§‡āĻˇā§‡ āĻ†āĻ›ā§‡.

āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨

ES2017 (ES8) āĻ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ•āĻžāĻœāĻŸāĻŋāĻ•ā§‡ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ° "āĻ‰āĻĒāĻ°ā§‡" āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ—ā§āĻŖāĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ§āĻžāĻ°āĻŖāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ Async āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻ•ā§‹āĻĄā§‡āĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ‰āĻĻā§āĻĻāĻŋāĻˇā§āĻŸāĨ¤

Async/Await āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻļā§ˆāĻ˛ā§€āĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻ•ā§‹āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤

āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻœāĻžāĻ¨āĻžāĻ° āĻĢāĻ˛ā§‡ Async/Await-āĻāĻ° āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻŦā§‹āĻāĻž āĻ¸āĻšāĻœ āĻšāĻ¯āĻŧā§ˇ

āĻļāĻŦā§āĻĻāĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻŸāĻŋ āĻĻā§āĻŸāĻŋ āĻ•ā§€āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤: async āĻāĻŦāĻ‚ awaitāĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻļāĻŦā§āĻĻāĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ‰ā§ŽāĻĒāĻ¨ā§āĻ¨ āĻšāĻŦā§‡āĨ¤

// 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');
  }
}

āĻāĻ¨āĻŦāĻŋ ! āĻāĻŸāĻž āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻž āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻ¯ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ•āĻ¨āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ° āĻāĻŦāĻ‚ āĻ—ā§‡āĻŸāĻžāĻ°/āĻ¸ā§‡āĻŸāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻžāĨ¤

āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŦāĻŋāĻĻā§āĻ¯āĻž āĻāĻŦāĻ‚ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻ¨ā§‡āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ

Async āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŽā§‚āĻ˛āĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ JS āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ, āĻ¤āĻŦā§‡ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡:

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

āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡, fn āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻšā§āĻ¯āĻžāĻ˛ā§‹ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨, āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻŽāĻžāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨ā§āĻ¸āĻŸā§āĻ°āĻžāĻ•ā§āĻŸāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ¤ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ 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.resolve āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻŽā§āĻŦāĻ˛āĻŋāĻ¤ Promise.reject āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻŦā§‡āĨ¤

āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšā§‹āĻ• āĻ¨āĻž āĻ•ā§‡āĻ¨āĨ¤

āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ¯āĻŧ āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ…āĻ­āĻŋāĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤. āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¯āĻĻāĻŋ āĻ…āĻ­āĻŋāĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻšāĻ¯āĻŧ, āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ 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 = await Promise.resolve(9);āĨ¤
  • Await āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ āĻ¸ā§āĻĨāĻ—āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ° āĻŽāĻžāĻ¨ āĻĒāĻžāĻ¯āĻŧ (āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻāĻŸāĻŋ 9)āĨ¤
  • delayAndGetRandom(1000) fn āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ (1 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻĒāĻ°ā§‡) āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡ āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°āĻ­āĻžāĻŦā§‡ 1 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ fn āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤
  • delayAndGetRandom(1000) āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻāĻ˛ā§‹āĻŽā§‡āĻ˛ā§‹ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻĒāĻ°ā§‡ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
  • āĻ“āĻ¯āĻŧā§‡āĻ˛, āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ c āĻāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ a āĻāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒāĨ¤ āĻāĻ° āĻĒāĻ°ā§‡, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻāĻ• āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻ¨ delayAndGetRandom(1000) āĻ•āĻŋāĻ›ā§āĻ‡ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧ āĻ¨āĻž āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤
  • āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, a + b * c āĻ¸ā§‚āĻ¤ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ Promise.resolve āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ¤ā§‡ āĻŽā§‹āĻĄāĻŧāĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸ā§‡āĨ¤

āĻāĻ‡ āĻŦāĻŋāĻ°āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ ES6-āĻāĻ° āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸāĻ°ā§‡āĻ° āĻ¸ā§āĻŽāĻ°āĻŖ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻāĻ¤ā§‡ āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻ°āĻŖ.

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨

āĻ†āĻšā§āĻ›āĻž, āĻāĻ–āĻ¨ āĻ‰āĻĒāĻ°ā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻĻā§‡āĻ–āĻŋāĨ¤

FinishMyTask āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ 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);
  }
}

āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ

āĻ†āĻ¨-āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ•āĻ°āĻž āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ†āĻŦā§ƒāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸āĻ­āĻžāĻŦā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻˇā§āĻŸāĻž/āĻ•ā§āĻ¯āĻžāĻš āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

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 āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸ āĻ•āĻ°āĻžāĻ° āĻ†āĻļāĻž āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻĢāĻ˛ā§‡ āĻ•ā§āĻ¯āĻžāĻš āĻŦā§āĻ˛āĻ• āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻŦā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, foo āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻšāĻ¯āĻŧ āĻ…āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ (āĻ¯āĻ–āĻ¨ āĻŸā§āĻ°āĻžāĻ‡ āĻŦā§āĻ˛āĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻ¨āĻž) āĻ…āĻĨāĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ§āĻ°āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§‡āĻˇ āĻšāĻŦā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻŦā§‡ āĻ¨āĻž āĻ•āĻžāĻ°āĻŖ āĻšā§‡āĻˇā§āĻŸāĻž/āĻ•ā§āĻ¯āĻžāĻš āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ 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 āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĢāĻŋāĻ°āĻŦā§‡, undefined āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¨āĻ¯āĻŧāĨ¤ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻžāĻ° āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž canRejectOrReturn() āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻāĻŸāĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

try {
    const value = await canRejectOrReturn();
    return value;
}
// â€Ļ

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ­ā§āĻ˛ āĻāĻŦāĻ‚ āĻ•ā§āĻˇāĻ¤āĻŋ

āĻ•āĻŋāĻ›ā§ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, Async/Await āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ˛ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ° āĻ•āĻĨāĻž āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ›āĻŋ

āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ˜āĻŸā§‡ - āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ° āĻ†āĻ—ā§‡ await āĻ•ā§€āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄāĻŸāĻŋ āĻ­ā§āĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧ:

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

āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻ•ā§‹āĻĄāĻŸāĻŋāĻ¤ā§‡ āĻ•ā§‹āĻ¨ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻŦāĻž āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¨ā§‡āĻ‡āĨ¤ āĻ¤āĻžāĻ‡ foo āĻ¸āĻ°ā§āĻŦāĻĻāĻž 1 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ āĻĻā§‡āĻ°āĻŋ āĻ¨āĻž āĻ•āĻ°ā§‡ undefined āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¤āĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĒā§‚āĻ°āĻŖ āĻšāĻŦā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻŦāĻž āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¨ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ 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'];
}

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ°āĻĢāĻžāĻ¤ āĻ¸āĻžāĻ˛āĻŽāĻžāĻ¨, āĻ…āĻ•ā§āĻŸā§‹āĻ•ā§āĻ¯āĻžāĻŸ, āĻ¨āĻ°āĻ­āĻŋāĻ— āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻ°āĻŋ:

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

.map āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ¯āĻŧ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ—āĻŖāĻ¨āĻž āĻšāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡, āĻāĻŦāĻ‚ .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;
}

āĻāĻ–āĻžāĻ¨ā§‡ āĻ°ā§‡āĻĒā§‹ āĻ¨āĻŽā§āĻŦāĻ°āĻŸāĻŋ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡ āĻ°āĻžāĻ–āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻŸāĻŋ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻ¸ āĻ…ā§āĻ¯āĻžāĻ°ā§‡āĻ¤ā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•ā§‹āĻĄā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻ¯ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻĄā§‡āĻŸāĻž āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¨āĻž āĻ†āĻ¸āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŦāĻžāĻ‡ āĻŽā§‹āĻĄā§‡ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¯āĻĻāĻŋ āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 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 āĻ‡āĻ¨āĻĒā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻĒāĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻĒāĻ°ā§‡āĻ°āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻŦāĻž āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻ˜āĻŸāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ¸āĻŦ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ āĻ¨āĻž - āĻāĻ•āĻ¯ā§‹āĻ—ā§‡ āĻļā§āĻ°ā§ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻŋ-āĻŽā§āĻ¯āĻžāĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

Async āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ°āĻŽāĻļ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ āĻ›ā§‡āĨ¤ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ…āĻ­āĻŋāĻ¯ā§‹āĻœāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ• āĻ‡āĻŸāĻžāĻ°ā§‡āĻŸāĻ°. āĻāĻ•āĻœāĻ¨ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻ•ā§‡ āĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻĒāĻžāĻ°āĻĻāĻ°ā§āĻļā§€ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

Skillbox āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°ā§‡:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨