āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻ˛ā§āĻāĻ āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ 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