เจ†เจ‰ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ JavaScript เจตเจฟเฉฑเจš Async/Await เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ

เจฒเฉ‡เจ– เจฆเจพ เจฒเฉ‡เจ–เจ• JavaScript เจตเจฟเฉฑเจš Async/Await เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจ•เฉ‹เจก เจฒเจฟเจ–เจฃ เจฆเจพ เจ‡เฉฑเจ• เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจ…เจธเจฟเฉฐเจ•/เจ‰เจกเฉ€เจ•เฅค เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเฉ‡ เจชเฉเจฐเจ—เจŸ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ…เจœเจฟเจนเจพ เจ•เฉ‹เจก เจ•เจพเจฒเจฌเฉˆเจ• เจ…เจคเฉ‡ เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจฟเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจธเฉ€เฅค เจฎเฉ‚เจฒ เจฒเฉ‡เจ– เจฆเจพ เจฒเฉ‡เจ–เจ• เจตเฉฑเจ–-เจตเฉฑเจ– เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจ•เฉ‡ Async/Await เจฆเฉ‡ เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจฆเจพ เจ–เฉเจฒเจพเจธเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚: "Habr" เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจชเจพเจ เจ•เจพเจ‚ เจฒเจˆ - "Habr" เจชเฉเจฐเจšเจพเจฐ เจ•เฉ‹เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจ•เจฟเฉฑเจฒเจฌเจพเจ•เจธ เจ•เฉ‹เจฐเจธ เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒเจพ เจฒเฉˆเจฃ เจตเฉ‡เจฒเฉ‡ 10 เจฐเฉ‚เจฌเจฒ เจฆเฉ€ เจ›เฉ‹เจŸเฅค

เจธเจ•เจฟเฉฑเจฒเจฌเจพเจ•เจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ: เจตเจฟเจฆเจฟเจ…เจ• เจ”เจจเจฒเจพเจˆเจจ เจ•เฉ‹เจฐเจธ "เจœเจพเจตเจพ เจกเจฟเจตเฉˆเจฒเจชเจฐ".

เจ•เจพเจฒเจฌเฉˆเจ•

เจ•เจพเจฒเจฌเฉˆเจ• เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจ•เจพเจฒ เจ…เจฃเจฎเจฟเฉฑเจฅเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ เจฆเฉ‡เจฐเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจชเจนเจฟเจฒเจพเจ‚, เจ•เฉ‹เจก เจฆเฉ‡ เจ‰เจนเจจเจพเจ‚ เจ–เฉ‡เจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจ•เจพเจฒเจฌเฉˆเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจธเฉ€ เจœเจฟเฉฑเจฅเฉ‡ เจจเจคเฉ€เจœเจพ เจคเฉเจฐเฉฐเจค เจชเฉเจฐเจพเจชเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจธเฉ€เฅค

เจ‡เฉฑเจฅเฉ‡ 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 เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฆเจฐเจœ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจฎเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค

เจ•เฉ‹เจก เจฆเฉ‡ เจ…เฉฐเจคเจฎ เจนเจฟเฉฑเจธเฉ‡ เจตเจฟเฉฑเจš เจ•เจพเจฒเจฌเฉˆเจ• เจฆเฉ‡ เจ“เจตเจฐเจฒเฉˆเจช เจ…เจคเฉ‡ } เจฆเฉ€ เจตเฉฑเจกเฉ€ เจธเฉฐเจ–เจฟเจ† เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆเฅค เจ‡เจธเจจเฉ‚เฉฐ เจ•เจพเจฒเจฌเฉˆเจ• เจนเฉˆเจฒ เจœเจพเจ‚ เจชเจฟเจฐเจพเจฎเจฟเจก เจ†เจซเจผ เจกเฉ‚เจฎ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจตเจฟเจงเฉ€ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจธเจชเฉฑเจธเจผเจŸ เจนเจจ:

  • เจ‡เจน เจ•เฉ‹เจก เจชเฉœเฉเจนเจจเจพ เจ”เจ–เจพ เจนเฉˆเฅค
  • เจ—เจฒเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃเจพ เจตเฉ€ เจฎเฉเจธเจผเจ•เจฒ เจนเฉˆ, เจœเฉ‹ เจ…เจ•เจธเจฐ เจฎเจพเฉœเฉ€ เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเฉฑเจฒ เจ–เฉœเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ, เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจจเฉ‚เฉฐ JavaScript เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจ‰เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจพเจฒเจฌเฉˆเจ• เจฆเฉ‡ เจกเฉ‚เฉฐเจ˜เฉ‡ เจ†เจฒเฉเจนเจฃเฉ‡ เจจเฉ‚เฉฐ เจธเจผเจฌเจฆ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ .เจซเจฟเจฐ.

เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเจพ เจธเจ•เจพเจฐเจพเจคเจฎเจ• เจชเจนเจฟเจฒเฉ‚ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‰เจน เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ–เฉฑเจฌเฉ‡ เจคเฉ‹เจ‚ เจธเฉฑเจœเฉ‡ เจฆเฉ€ เจฌเจœเจพเจ เจ‰เฉฑเจชเจฐ เจคเฉ‹เจ‚ เจนเฉ‡เจ เจพเจ‚ เจคเฉฑเจ• เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจตเฉ€ เจนเจจ:

  • เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเจพ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ .เจซเจฟเจฐ.
  • เจ•เฉ‹เจธเจผเจฟเจธเจผ/เจ•เฉˆเจš เจฆเฉ€ เจฌเจœเจพเจ, เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃ เจฒเจˆ .catch เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค
  • เจ‡เฉฑเจ• เจฒเฉ‚เจช เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ•เจˆ เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ; เจ•เฉเจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, เจ‰เจน เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉฑเจธเจฟเจ† เจนเฉˆ เจœเฉ‹ เจ†เจ–เจฐเฉ€ เจฌเจฟเฉฐเจฆเฉ‚ เจฆเจพ เจ…เจฐเจฅ เจฆเจฟเจ–เจพเจเจ—เฉ€.

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจฒเฉ‚เจช เจนเฉˆ เจœเฉ‹ เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ เจ…เฉฐเจคเจฐเจพเจฒเจพเจ‚ (0โ€“n เจธเจ•เจฟเฉฐเจŸเจพเจ‚) 'เจคเฉ‡ 10 เจคเฉ‹เจ‚ 0 เจคเฉฑเจ• เจธเฉฐเจ–เจฟเจ†เจตเจพเจ‚ เจฆเจพ เจ•เฉเจฐเจฎ เจชเฉเจฐเจฟเฉฐเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจฒเฉ‚เจช เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจจเฉฐเจฌเจฐ 0 เจคเฉ‹เจ‚ 10 เจคเฉฑเจ• เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจ›เจพเจชเฉ‡ เจœเจพเจฃเฅค เจ‡เจธ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจ‡เฉฑเจ• เจœเจผเฉ€เจฐเฉ‹ เจจเฉ‚เฉฐ เจชเฉเจฐเจฟเฉฐเจŸ เจ•เจฐเจจ เจตเจฟเฉฑเจš 6 เจธเจ•เจฟเฉฐเจŸ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจชเฉเจฐเจฟเฉฐเจŸ เจ•เจฐเจจ เจฒเจˆ 2 เจธเจ•เจฟเฉฐเจŸ เจฒเฉฑเจ—เจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจœเจผเฉ€เจฐเฉ‹ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจ›เจพเจชเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจ›เจพเจชเจฃ เจฒเจˆ เจ•เจพเจŠเจ‚เจŸเจกเจพเจŠเจจ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ…เจคเฉ‡ เจฌเฉ‡เจธเจผเฉฑเจ•, เจ…เจธเฉ€เจ‚ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ Async/Await เจœเจพเจ‚ .sort เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจนเฉฑเจฒ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจนเฉˆ.

เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจ

ES2017 (ES8) เจตเจฟเฉฑเจš เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจœเฉ‹เฉœ เจจเฉ‡ เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‡เจ† เจนเฉˆเฅค เจฎเฉˆเจ‚ เจจเฉ‹เจŸ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจ เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเฉ‡ "เจธเจฟเจ–เจฐ 'เจคเฉ‡" เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจซเฉฐเจ•เจธเจผเจจ เจ—เฉเจฃเจพเจคเจฎเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจงเจพเจฐเจจเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเจพ เจ‰เจฆเฉ‡เจธเจผ เจ•เฉ‹เจก เจฆเฉ‡ เจตเจฟเจ•เจฒเจช เจตเจœเฉ‹เจ‚ เจนเฉˆ เจœเฉ‹ เจตเจพเจ…เจฆเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

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

NB! เจ‡เจน เจฏเจพเจฆ เจฐเฉฑเจ–เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ เจ•เจฒเจพเจธ เจ•เฉฐเจธเจŸเจฐเจ•เจŸเจฐ เจ…เจคเฉ‡ เจ—เฉ‡เจŸเจฐ/เจธเฉˆเจŸเจฐ เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ…เจฐเจฅ เจตเจฟเจ—เจฟเจ†เจจ เจ…เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจจเจฟเจฏเจฎ

เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ‚เจกเจฐเจก เจœเฉ‡เจเจธ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจธเจฎเจพเจจ เจนเจจ, เจชเจฐ เจ…เจชเจตเจพเจฆ เจนเจจเฅค

เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจ เจนเจฎเฉ‡เจธเจผเจพ เจตเจพเจ…เจฆเฉ‡ เจตเจพเจชเจธ เจ•เจฐเจฆเฉ‡ เจนเจจ:

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 เจซเฉฐเจ•เจธเจผเจจ เจนเจฎเฉ‡เจธเจผเจพ เจ‡เฉฑเจ• เจตเจพเจ…เจฆเจพ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ, เจšเจพเจนเฉ‡ เจœเฉ‹ เจตเฉ€ เจตเจพเจชเจธ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉ‹เจตเฉ‡เฅค

เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจซเฉฐเจ•เจธเจผเจจ เจนเจฐ เจ‰เจกเฉ€เจ• 'เจคเฉ‡ เจฐเฉเจ• เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‰เจกเฉ€เจ• เจธเจฎเฉ€เจ•เจฐเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจธเจฎเฉ€เจ•เจฐเจจ เจ‡เฉฑเจ• เจตเจพเจ…เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ 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) เจฐเฉˆเจœเจผเฉ‹เจฒเจฟเจŠเจธเจผเจจ เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ เจฎเฉเฉฑเจฒ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจซเจฟเจฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ b เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
  • เจ–เฉˆเจฐ, เจตเฉ‡เจฐเฉ€เจเจฌเจฒ 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 เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจนเฉฑเจฒ เจนเฉˆเฅค

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 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจจเจพเจฒ เจ—เจฒเจคเฉ€เจ†เจ‚ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจ‡เฉฐเจคเจœเจผเจพเจฐ เจญเฉเฉฑเจฒ เจ—เจ

เจ‡เจน เจ…เจ•เจธเจฐ เจตเจพเจชเจฐเจฆเจพ เจนเฉˆ - เจ‰เจกเฉ€เจ• เจ•เฉ€เจตเจฐเจก เจตเจพเจ…เจฆเฉ‡ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจญเฉเฉฑเจฒ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

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

เจ‡เจน .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 เจ‡เฉฐเจชเฉเฉฑเจŸ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเจพเจ…เจฆเจฟเจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจฒเฉœเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเจพเจ…เจฆเจพ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฌเจพเจ…เจฆ เจตเจพเจฒเฉ‡ เจจเฉ‚เฉฐ เจเจฐเฉ‡ เจตเจฟเจšเจฒเฉ‡ เจธเจพเจฐเฉ‡ เจตเจพเจ…เจฆเฉ‡ เจชเฉ‚เจฐเฉ‡ เจนเฉ‹เจฃ เจœเจพเจ‚ เจชเจนเจฟเจฒเฉ‡ เจ…เจธเจตเฉ€เจ•เจพเจฐ เจนเฉ‹เจฃ 'เจคเฉ‡ เจชเฉ‚เจฐเจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจน เจธเจพเจฐเฉ‡ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจธเจผเฉเจฐเฉ‚ เจจเจพ เจนเฉ‹เจฃ - เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจชเฉ€-เจฎเฉˆเจช เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจธเจฟเฉฑเจŸเจพ

เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉเฉฐเจฆเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจนเจจเฅค เจ–เฉˆเจฐ, เจ…เจธเจฟเฉฐเจ• เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจ…เจจเฉเจ•เฉ‚เจฒ เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฐเจคเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ…เจธเจฟเฉฐเจ• เจ‡เจŸเจฐเฉ‡เจŸเจฐ. เจ‡เฉฑเจ• JavaScript เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเฉฑเจš เจšเฉฐเจ—เฉ€ เจคเจฐเฉเจนเจพเจ‚ เจœเจพเจฃเฉ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจธเจ•เจฟเฉฑเจฒเจฌเจพเจ•เจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹