рдпрд╣рд╛рдБ рдПрдбреНрд░рд┐рдпрди рд╣рд╛рдЬрд╝рд┐рди рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬрд┐рд╕реЗ рдлреНрд░реАрдХреЛрдбрдХреИрдВрдк рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рд▓реЗрдЦрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд╛рдн рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдзреНрдпрд╛рди рджреЗрдВ ...рдореИрдВрдиреЗ рди рдХреЗрд╡рд▓ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрд╛, рдмрд▓реНрдХрд┐ YouTube рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рднреА рдмрдирд╛рдпрд╛!
рдЖрдк рд╡реАрдбрд┐рдпреЛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдкрдврд╝реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡реАрдбрд┐рдпреЛ рдХреЗ рджреМрд░рд╛рди рдХреЛрдб рд▓рд┐рдЦреЗрдВред
рд╡реАрдбрд┐рдпреЛ рд▓рд┐рдВрдХ:
рдЗрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ Async / Await рдЬрд╛рдиреЗрдВрдкрд░рд┐рдЪрдп
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ Async / рдЗрдВрддрдЬрд╛рд░ред рдпрд╣ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╡рд╛рджреЛрдВ рдХреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдЬреЛ async / wait рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдпрд╣реА рдЙрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рд╣реИред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рддрд░реАрдХреЗ рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд╛рджреЗ рдереЗред
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛рд░реНрдп
setTimeout(() => { console.log('This runs after 1000 milliseconds.'); }, 1000);
рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛ - рдХреБрдЦреНрдпрд╛рдд рдХреЙрд▓рдмреИрдХ рдирд░рдХ
рдЬрдм рдЖрдк рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдЬрд▓реНрдж рд╣реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрддрд╛ рд╣реИ:
рдХреЙрд▓рдмреИрдХ рдирд░рдХрдХреЙрд▓рдмреИрдХ рдирд░рдХрдпрд╣ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрдИ рд╕реНрддрд░реЛрдВ рдкрд░ рдЕрдиреНрдп рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛
const promiseFunction = new Promise((resolve, reject) => { const add = (a, b) => a + b; resolve(add(2, 2)); }); promiseFunction.then((response) => { console.log(response); }).catch((error) => { console.log(error); });
рд╡рд╛рджрд╛рдлрдВрдХреНрд╢рди рдПрдХ
рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдлрд╝рдВрдХреНрд╢рди
рдкреНрд░реЛрдорд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред
рддрдм рд╣рдо рдЗрд╕ рд╡рд╛рджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
.then () рдФрд░
.catch () рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рддрдм - рд╡рд╛рджрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓рдмреИрдХ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред
рдкрдХрдбрд╝ - рдЙрд╕ рдХреЙрд▓рдмреИрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рдерд╛ред
Async рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
Async рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдПрдХ
рд╕рд╛рдл рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдХрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Async рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред
Async рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рд╕реЗ рдкрд╣рд▓реЗ
async рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдХрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
const asyncFunction = async () => {
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде
рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдХреАрд╡рд░реНрдб рдЬреЛ рдХреЗрд╡рд▓
async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╕рдм рдХреБрдЫ рд╣реИ рдХрд┐ async рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рджреЗ рдФрд░ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░:
Async / wait рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреА рддрд░рд╣ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдЕрдм рдЬрдм рд╣рдордиреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ!
рдореБрджреНрд░рд╛ рдкрд░рд┐рд╡рд░реНрддрдХ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рдЕрдиреБрдХреВрд▓рди
рдЕрдм рд╣рдо рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд╣рд┐рдд) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЖрдкрдХреЗ
рдПрдПрд╕рдХреНрдпреВрдПрди / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдзрди рдХреА рд░рд╛рд╢рд┐ рд▓реЗрдЧрд╛, рдЬрд┐рд╕ рдореБрджреНрд░рд╛ рдХреЛрдб рд╕реЗ рд╣рдо рдЗрд╕ рд░рд╛рд╢рд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рд╕ рдореБрджреНрд░рд╛ рдХреЛрдб рдореЗрдВ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдм рдПрдкреАрдЖрдИ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣реА рд╡рд┐рдирд┐рдордп рджрд░ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рджреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:
- рдореБрджреНрд░рд╛ рдкрд░рдд - https://currencylayer.com - рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╣ рд╣рдореЗрдВ рд╡рд┐рдирд┐рдордп рджрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
- рдмрд╛рдХреА рджреЗрд╢реЛрдВ - http://restcountries.eu/ - рдпрд╣ рдПрдкреАрдЖрдИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдЙрд╕ рдореБрджреНрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдЕрднреА-рдЕрднреА рдЕрдкрдирд╛ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░
npm init
рдЪрд▓рд╛рдПрдВ, рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ npm
npm i -- save axios
axios рдХреЛ рд▓рд┐рдЦрдХрд░ axios рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
currency-converter.js
рдирд╛рдордХ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред
рдЯрд╛рдЗрдкрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз axios:
const axios = require('axios');
рдЪрд▓реЛ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ
рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рддреАрди рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реИред рдПрдХ рдпрд╛ рджреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐
рддреАрди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп ред рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдореБрджреНрд░рд╛рдУрдВ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рджреВрд╕рд░рд╛ - рджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рддреАрд╕рд░рд╛ - рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдореБрджреНрд░рд╛ рдбреЗрдЯрд╛ рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░рд╕реАрдж рд╣реИрд╣рдо рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рджреЛ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ - fromCurrency рдФрд░ toCurrencyред
const getExchangeRate = async (fromCurrency, toCurrency) => {}
рдЕрдм рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рдПрдХ рдЪрд░ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдирд╛ рдкрд╛рд╕рдкреЛрд░реНрдЯ рджрд░реНрдЬ рдХрд░рдирд╛ рдФрд░ рджрд░реНрдЬ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
const getExchangeRate = async (fromCurrency, toCurrency) => { const response = await axios.get('http://data.fixer.io/api/latest? access_key=[yourAccessKey]&format=1'); }
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдбреЗрдЯрд╛ response.data.rates рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реАрдзреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const rate = response.data.rates;
рдЪреВрдБрдХрд┐ рд╕рдм рдХреБрдЫ рдпреВрд░реЛ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдиреАрдЪреЗ рд╣рдо рдпреВрд░реЛ рдирд╛рдордХ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдЙрд╕ рдореБрджреНрд░рд╛ рдХреЗ 1 / рдмрд░рд╛рдмрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдкреИрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
const euro = 1 / rate[fromCurrency];
рдФрд░ рд╡рд┐рдирд┐рдордп рджрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпреВрд░реЛ рдХреЛ рдЙрд╕ рдореБрджреНрд░рд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
const exchangeRate = euro * rate[toCurrency];
рдирддреАрдЬрддрди, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдп рджреЗрд╢ рдбреЗрдЯрд╛ рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдзрд┐рдЧреНрд░рд╣рдг рд╣реИрд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдореБрджреНрд░рд╛рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдЧрд╛:
const getCountries = async (currencyCode) => {}
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣, рд╣рдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:
const response = await axios.get(`https://restcountries.eu/rest/v2/currency/${currencyCode}`);
рдлрд┐рд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдореБрджреНрд░рд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдФрд░ рд░рд┐рдЯрд░реНрди
country.name
рдорд┐рд▓рд╛рди рдХрд░реЗрдВрдЧреЗ
country.name
return response.data.map(country => country.name);
рдирддреАрдЬрддрди, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рддреАрд╕рд░рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп - рд╣рдо рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВрд╣рдо рдПрдХ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди
рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛
CCurrency ,
toCurrency рдФрд░ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реНрдХ:
const convert = async (fromCurrency, toCurrency, amount) => {}
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдореБрджреНрд░рд╛ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
const exchangeRate = await getExchangeRate(fromCurrency, toCurrency);
рдлрд┐рд░ рджреЗрд╢ рдбреЗрдЯрд╛:
const countries = await getCountries(toCurrency);
рдЙрд╕рдХреЗ рдмрд╛рдж, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╛рд╢рд┐ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:
const convertedAmount = (amount * exchangeRate).toFixed(2);
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рд╕рдм рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
return `${amount} ${fromCurrency} is worth ${convertedAmount} ${toCurrency}. You can spend these in the following countries: ${countries}`;
рдПрдХ рд╕рд╛рде, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ:
const getExchangeRate = async (fromCurrency, toCurrency) => { try { const response = await axios.get('http://data.fixer.io/api/latest?access_key=f68b13604ac8e570a00f7d8fe7f25e1b&format=1'); const rate = response.data.rates; const euro = 1 / rate[fromCurrency]; const exchangeRate = euro * rate[toCurrency]; return exchangeRate; } catch (error) { throw new Error(`Unable to get currency ${fromCurrency} and ${toCurrency}`); } };
рджреВрд╕рд░реЗ рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ:
const getCountries = async (currencyCode) => { try { const response = await axios.get(`https://restcountries.eu/rest/v2/currency/${currencyCode}`); return response.data.map(country => country.name); } catch (error) { throw new Error(`Unable to get countries that use ${currencyCode}`); } };
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
convertCurrency('USD', 'HRK', 20) .then((message) => { console.log(message); }).catch((error) => { console.log(error.message); });
рдкрд░рд┐рдгрд╛рдо рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:

рд╡рд╣ рд╕рдм рд╣реИ!
рдЖрдк рдЕрдВрдд рддрдХ рд╕рднреА рддрд░рд╣ рд╕реЗ рдЖрдП рд╣реИрдВ! рдпрджрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛, рддреЛ рдЖрдк рдЗрд╕
рднрдВрдбрд╛рд░ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рд╕рдореАрдХреНрд╖рд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреЗрдВ ред рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдмрдбрд╝реА рдорджрдж YouTube рдкрд░ рдЖрдкрдХрд╛ рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рд╣рд╛рдВ рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рд╣реИ!
рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ - рдЬрд▓реНрдж рд╣реА
рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА! :)
рдЖрдк
рдорд╛рдирдЧреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред