เจฒเฉเจ เจฆเจพ เจฒเฉเจเจ 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 เจเฉฐเจชเฉเฉฑเจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ เจตเจพเจ เจฆเจฟเจเจ เจฆเฉ เจเฉฑเจ เจฒเฉเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเฉฑเจ เจตเจพเจ เจฆเจพ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉเฅค เจฌเจพเจ เจฆ เจตเจพเจฒเฉ เจจเฉเฉฐ เจเจฐเฉ เจตเจฟเจเจฒเฉ เจธเจพเจฐเฉ เจตเจพเจ เจฆเฉ เจชเฉเจฐเฉ เจนเฉเจฃ เจเจพเจ เจชเจนเจฟเจฒเฉ เจ เจธเจตเฉเจเจพเจฐ เจนเฉเจฃ 'เจคเฉ เจชเฉเจฐเจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจน เจนเฉ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจเจน เจธเจพเจฐเฉ เจเฉฑเจเฉ เจธเจฎเฉเจ เจธเจผเฉเจฐเฉ เจจเจพ เจนเฉเจฃ - เจเฉฑเจเฉ เจธเจฎเฉเจ เจธเจผเฉเจฐเฉ เจนเฉเจฃ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃ เจฒเจ, เจคเฉเจธเฉเจ เจชเฉ-เจฎเฉเจช เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจธเจฟเฉฑเจเจพ
เจ
เจธเจฟเฉฐเจ เจซเฉฐเจเจธเจผเจจ เจตเจฟเจเจพเจธ เจฒเจ เจคเฉเจเจผเฉ เจจเจพเจฒ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเฉฐเจฆเฉ เจเจพ เจฐเจนเฉ เจนเจจเฅค เจเฉเจฐ, เจ
เจธเจฟเฉฐเจ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจ
เจจเฉเจเฉเจฒ เจตเจฐเจคเฉเจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจตเจฐเจคเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ
เจธเจเจฟเฉฑเจฒเจฌเจพเจเจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ:
- เจชเฉเจฐเฉเจเจเฉเจเจฒ เจเฉเจฐเจธ
"เจฎเฉเจฌเจพเจเจฒ เจกเจฟเจตเฉเจฒเจชเจฐ เจชเฉเจฐเฉ" .- เจเจจเจฒเจพเจเจจ เจเฉเจฐเจธ เจ เจชเจฒเจพเจ เจเฉเจคเจพ
"เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจเจจเจพเจฒเจฟเจธเจ" .- เจฆเฉ เจธเจพเจฒเจพ เจชเฉเจฐเฉเจเจเฉเจเจฒ เจเฉเจฐเจธ
"เจฎเฉเจ เจเฉฑเจ เจชเฉเจฐเฉ เจตเฉเฉฑเจฌ เจกเจฟเจตเฉเจฒเจชเจฐ เจนเจพเจ" .
เจธเจฐเฉเจค: www.habr.com