αžαŸ„αŸ‡αž˜αžΎαž› Async/Await αž€αŸ’αž“αž»αž„ JavaScript αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸ

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ Async/Await αž“αŸ…αž€αŸ’αž“αž»αž„ JavaScript αŸ” αžŸαžšαž»αž”αž˜αž€ Async/Await αž‚αžΊαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαž’αžŸαž˜αž€αžΆαž›αŸ” αž˜αž»αž“αž–αŸαž›αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸαŸ‡αž›αŸαž…αž‘αžΎαž„ αž€αžΌαžŠαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž αŸ…αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αž“αž·αž„αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ” αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž’αžαŸ’αžαž”αž‘αžŠαžΎαž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹ Async/Await αžŠαŸ„αž™αž€αžΆαžšαžœαž·αž—αžΆαž‚αž§αž‘αžΆαž αžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αŸ”

αž™αžΎαž„αžšαŸ†αž›αžΉαž€αŸ– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ "Habr" - αž€αžΆαžšαž”αž‰αŸ’αž…αž»αŸ‡αžαž˜αŸ’αž›αŸƒ 10 rubles αž“αŸ…αž–αŸαž›αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ Skillbox αžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž›αŸαžαž€αžΌαžŠαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™ "Habr" αŸ”

Skillbox αžŽαŸ‚αž“αžΆαŸ†αŸ– αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αž "αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Java".

αž αŸ…αž‘αŸ…αžœαž·αž‰

Callback αž‚αžΊαž‡αžΆαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” αž–αžΈαž˜αž»αž“ αž€αžΆαžšαž αŸ…αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž“αŸƒαž€αžΌαžŠαžŠαŸ‚αž›αž›αž‘αŸ’αž’αž•αž›αž˜αž·αž“αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž—αŸ’αž›αžΆαž˜αŸ—αŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž’αžΆαž“αž―αž€αžŸαžΆαžšαž€αŸ’αž“αž»αž„ 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αŸ” αž–αž½αž€αž‚αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ†αž“αž½αžŸαžŸαŸ†αž”αž»αž€αž‡αŸ’αžšαŸ…αž“αŸƒαž€αžΆαžšαž αŸ…αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αžŠαŸ„αž™αž–αžΆαž€αŸ’αž™ .then αŸ”

αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž‚αžΊαžαžΆαž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαž’αžΆαž…αž’αžΆαž“αž”αžΆαž“αž€αžΆαž“αŸ‹αžαŸ‚αž›αŸ’αž’αž–αžΈαž€αŸ†αž–αžΌαž›αž‘αŸ…αž”αžΆαžαž‡αžΆαž‡αžΆαž„αž–αžΈαž†αŸ’αžœαŸαž„αž‘αŸ…αžŸαŸ’αžαžΆαŸ†αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž€αŸαž˜αžΆαž“αž”αž‰αŸ’αž αžΆαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž•αž„αžŠαŸ‚αžšαŸ–

  • αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αžšαžΎαž“αŸ”
  • αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ try/catch, .catch αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαžΆαž›αŸ‹αž€αŸ†αž αž»αžŸαŸ”
  • αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž˜αž½αž™αž‚αžΊαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ„αŸ‡αž‘αŸ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžαŸ’αž›αŸ‡αžœαžΆαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž’αžαŸ’αžαž“αŸαž™αž“αŸƒαž…αŸ†αžŽαž»αž…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ”

αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸ‚αž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž›αŸαžαž–αžΈ 0 αž‘αŸ… 10 αž“αŸ…αž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αž…αŸƒαžŠαž“αŸ’αž™ (0–n αžœαž·αž“αžΆαž‘αžΈ)αŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž›αŸαžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž–αžΈ 0 αž‘αŸ… 10αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž› 6 αžœαž·αž“αžΆαž‘αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž›αŸαžαžŸαžΌαž“αŸ’αž™ αž“αž·αž„ 2 αžœαž·αž“αžΆαž‘αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž›αŸαžαžŸαžΌαž“αŸ’αž™αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž‡αžΆαž˜αž»αž“αžŸαž·αž“ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž€αžΆαžšαžšαžΆαž”αŸ‹αžαž™αž€αŸ’αžšαŸ„αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αž αžΎαž™αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎ Async/Await ឬ .sort αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž‘αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αžΊαž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αŸ”

αž˜αž»αžαž„αžΆαžš Async

αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž˜αž»αžαž„αžΆαžš async αž“αŸ…αž€αŸ’αž“αž»αž„ ES2017 (ES8) αž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž„αžΆαžšαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ” αžαŸ’αž‰αž»αŸ†αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž˜αž»αžαž„αžΆαžš async αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš "αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›" αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ” αž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αž·αž“αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž‚αž»αžŽαž—αžΆαž–αž‘αŸαŸ” αž˜αž»αžαž„αžΆαžš Async αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΌαžŠαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ”

Async/Await αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž’αžΆαž…αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΌαžŠαž’αžŸαž˜αž€αžΆαž›αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜αžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž˜αž½αž™αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αžΆαžšαžŠαžΉαž„αž–αžΈαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αž’αŸ†αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒ 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! αžœαžΆαž‚αž½αžšαž’αŸ„αž™αž…αž„αž…αžΆαŸ†αžαžΆ class constructors αž“αž·αž„ getters/setters αž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž”αžΆαž“αž‘αŸαŸ”

αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αžΆαž€αŸ’αž™ αž“αž·αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž˜αž»αžαž„αžΆαžš Async αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž˜αž»αžαž„αžΆαžš JS αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž˜αž»αžαž„αžΆαžš async αžαŸ‚αž„αžαŸ‚αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ–

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

αž‡αžΆαž–αž·αžŸαŸαžŸ fn αžαŸ’αžšαž‘αž”αŸ‹αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš hello αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αžŠαŸ„αž™αžŸαžΆαžšαž“αŸαŸ‡αž‡αžΆαž˜αž»αžαž„αžΆαžšαž’αžŸαž˜αž€αžΆαž› αžαž˜αŸ’αž›αŸƒαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž»αŸ†αžŠαŸ„αž™αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ constructor αŸ”

αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαžšαž…αž“αžΆαž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ 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 αžαŸ‚αž„αžαŸ‚αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αŸ”

αž˜αž»αžαž„αžΆαžšαž’αžŸαž˜αž€αžΆαž›αž•αŸ’αž’αžΆαž€αžšαžΆαž›αŸ‹αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αŸ”

αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž·αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž·αž‚αžΊαž‡αžΆαž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž˜αž»αžαž„αžΆαžš 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; αž“αŸ…αž€αŸ’αž“αž»αž„ const a = αžšαž„αŸ‹αž…αžΆαŸ† Promise.resolve(9);
  • αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ’αžšαžΎ Await αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αž»αžαž„αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž’αžΆαž€αžšαž αžΌαžαžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆ (αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžœαžΆαž‚αžΊ 9)αŸ”
  • delayAndGetRandom(1000) αž•αŸ’αž’αžΆαž€αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αž»αžαž„αžΆαžš fn αžšαž αžΌαžαžŠαž›αŸ‹αžœαžΆαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆ (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ 1 αžœαž·αž“αžΆαž‘αžΈ)αŸ” αžœαžΆαž”αž‰αŸ’αžˆαž”αŸ‹αž˜αž»αžαž„αžΆαžš fn αž™αŸ‰αžΆαž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžšαž™αŸˆαž–αŸαž› 1 αžœαž·αž“αžΆαž‘αžΈαŸ”
  • delayAndGetRandom(1000) αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αžαŸ’αžšαž‘αž”αŸ‹αžαž˜αŸ’αž›αŸƒαž…αŸƒαžŠαž“αŸ’αž™ αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ…αž’αžαŸαžš αžαŸ”
  • αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αž€αžšαžŽαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž’αžαŸαžš 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 αŸ”

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

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαž»αžŸ

αž€αŸ†αž αž»αžŸβ€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžšαž»αŸ†β€‹αžŠαŸ„αž™β€‹αž€αžΆαžšβ€‹αžŸαž“αŸ’αž™αžΆβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αžŠαž·αžŸαŸαž’αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αž»αžαž„αžΆαžš async αž’αžΆαž…αž”αŸ’αžšαžΎ 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 αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžšαž”αžŸαŸ‹αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αž“αžΉαž„αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αŸƒαž”αŸ’αž›αž»αž€αž…αžΆαž”αŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž˜αž»αžαž„αžΆαžš 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 αž˜αž·αž“αž˜αŸ‚αž“αžŠαŸ„αž™αž˜αž·αž“αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸαŸ” αž…αžΌαžšβ€‹αž”αŸ’αžšαžΆαž€αžŠβ€‹αžαžΆβ€‹αžœαžΆβ€‹αžŠαŸ„αž™β€‹αž›αž»αž”β€‹αž”αž“αŸ’αž‘αžΆαžαŸ‹β€‹αžŠαŸ‚αž›β€‹αžšαž„αŸ‹αž…αžΆαŸ† canRejectOrReturn() αž…αŸαž‰αŸ–

try {
    const value = await canRejectOrReturn();
    return value;
}
// …

αž€αŸ†αž αž»αžŸαž“αž·αž„αž€αŸ†αž αž»αžŸαž‘αžΌαž‘αŸ…

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžαŸ’αž›αŸ‡αž€αžΆαžšαž”αŸ’αžšαžΎ Async/Await αž’αžΆαž…αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ”

αž—αŸ’αž›αŸαž…αžšαž„αŸ‹αž…αžΆαŸ†

αžœαžΆαž€αžΎαžαž‘αžΎαž„αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ - αž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡αžŠαŸ‚αž›αžšαž„αŸ‹αž…αžΆαŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž—αŸ’αž›αŸαž…αž˜αž»αž“αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαŸ–

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

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž¬αž€αžΆαžšαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ foo αžαŸ‚αž„αžαŸ‚αž…αŸαž‰αžŠαŸ„αž™αž˜αž·αž“αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› 1 αžœαž·αž“αžΆαž‘αžΈαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž”αŸ„αŸ‡αž…αŸ„αž›αž€αŸ†αž αž»αžŸ αž¬αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’ αž“αŸ„αŸ‡ UnhandledPromiseRejectionWarning αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αŸ…αŸ”

αž˜αž»αžαž„αžΆαžš Async αž€αŸ’αž“αž»αž„ Callbacks

αž˜αž»αžαž„αžΆαžš Async αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž”αŸ’αžšαžΎαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ .map ឬ .filter αž‡αžΆαž€αžΆαžšαž αŸ…αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž‚αžΊαž˜αž»αžαž„αžΆαžš fetchPublicReposCount(αžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹) αžŠαŸ‚αž›αžαŸ’αžšαž‘αž”αŸ‹αž…αŸ†αž“αž½αž“αžƒαŸ’αž›αžΆαŸ†αž„αžŠαŸ‚αž›αž”αžΎαž€αž“αŸ…αž›αžΎ 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 callbackαŸ” αž€αžΆαžšαžšαžΆαž”αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αžΆαžšαŸαž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž αžΎαž™ .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;
}

αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž›αŸαž repo αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž’αžαŸαžšαžšαžΆαž”αŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αŸαžαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αžΆαžšαŸαžšαžΆαž”αŸ‹αŸ” αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž€αžΌαžŠαž‚αžΊαžαžΆαžšαž αžΌαžαžŠαž›αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŠαŸ†αž”αžΌαž„αž˜αž€αžŠαž›αŸ‹αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžšαž„αŸ‹αž…αžΆαŸ†αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαž αŸ‚αž› 300 ms αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžœαžΆαž‚αžΊαž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαž αžΎαž™ αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ†αžŽαžΆαž™αžαžΆαž˜αž›αžΈαž“αŸαž’αŸŠαŸ‚αžšαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž…αŸ†αž“αž½αž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αž“αž½αž“ repo αž˜αž·αž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ” αžœαžΆαž‘αžΆαž˜αž‘αžΆαžšαž±αŸ’αž™αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ .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 αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž˜αž»αžαž„αžΆαžš Async αž€αžΆαž“αŸ‹αžαŸ‚αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžš async αžŠαŸ‚αž›αž’αžΆαž…αžŸαž˜αŸ’αžšαž”αžαŸ’αž›αž½αž“αž”αžΆαž“ αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ’αžšαžΎ Async Iterators. αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ JavaScript αž‚αž½αžšαžαŸ‚αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αžšαžΏαž„αž“αŸαŸ‡αŸ”

Skillbox αžŽαŸ‚αž“αžΆαŸ†αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹