เบเบนเปเบเบฝเบเบเบปเบเบเบงเบฒเบกเบเบงเบเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบ Async/Await เปเบ JavaScript. เปเบเบเบฅเบงเบกเปเบฅเปเบง, Async/Await เปเบเบฑเบเบงเบดเบเบตเบเบตเปเบชเบฐเบเบงเบเปเบเบเบฒเบเบเบฝเบเบฅเบฐเบซเบฑเบ asynchronous. เบเปเบญเบเบเบตเปเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบเบฒเบเบปเบ, เบฅเบฐเบซเบฑเบเบเบฑเปเบเบเปเบฒเบงเบเบทเบเบเบฝเบเปเบเบเปเบเปเบเบฒเบเปเบเบเบฑเบเปเบฅเบฐเบเปเบฒเบชเบฑเบเบเบฒ. เบเบนเปเบเบฝเบเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบปเปเบเบชเบฐเบเบฑเบเปเบเบตเบเปเบเบตเบเบเปเปเบเบตเบเบญเบ Async / Await เปเบเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเป.
เบเบงเบเปเบฎเบปเบฒเปเบเบทเบญเบ: เบชเปเบฒเบฅเบฑเบเบเบนเปเบญเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบ "Habr" - เบชเปเบงเบเบซเบผเบธเบ 10 rubles เปเบกเบทเปเบญเบฅเบปเบเบเบฐเบเบฝเบเปเบเบซเบผเบฑเบเบชเบนเบ Skillbox เปเบเบเปเบเปเบฅเบฐเบซเบฑเบเบชเบปเปเบเปเบชเบตเบก "Habr".
Skillbox เปเบเบฐเบเปเบฒ: เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบชเบถเบเบชเบฒเบญเบญเบเปเบฅเบเป
"เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Java" .
เปเบ
เปเบเบเบฑเบเปเบกเปเบเบเบฑเบเบเบฑเบเบเบตเปเบเบฒเบเปเบเบเบทเบเบเบฑเบเบเปเบฒเบขเปเบฒเบเบเปเปเบกเบตเบเบณเบเบปเบ. เบเปเบญเบเบซเบเปเบฒเบเบตเป, callbacks เปเบเปเบเบทเบเบเปเบฒเปเบเปเปเบเบเบทเปเบเบเบตเปเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบเบปเบเปเบเปเบฎเบฑเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฑเบเบเบต.
เบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบ asynchronously เบญเปเบฒเบเปเบเบฅเปเปเบ Node.js:
fs.readFile(__filename, 'utf-8', (err, data) => {
if (err) {
throw err;
}
console.log(data);
});
เบเบฑเบเบซเบฒเปเบเบตเบเบเบทเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเปเบเบดเปเบเบซเบผเบฒเบเบเบฑเปเบเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ. เปเบซเปเบเบดเบเบเบฐเบเบฒเบเบฒเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเป: เบเบฒเบเบฎเปเบญเบเบเปเปเบกเปเบเปเบฎเบฑเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบเบเบนเปเปเบเป Arfat, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบญเปเบฒเบเบเบฒเบเบชเบฐเบซเบเบฒเบก profile_img_url เบเบญเบเบกเบฑเบเปเบฅเบฐเบเบฒเบงเปเบซเบฅเบเบฎเบนเบเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบ someserver.com.
เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบเบฒเบงโเปเบซเบผเบโ, เบเบงเบโเปเบฎเบปเบฒโเบเปเบฝเบโเบฎเบนเบโเบเบฒเบโเบเบฑเบโเบฎเบนเบโเปเบเบโเบญเบทเปเบโ, เบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบปเบโเบเบปเบงโเบขเปเบฒเบโเบเบฒเบ PNG เบเบฑเบ JPEGโ. เบเปเบฒเบเบฒเบเบเปเบฝเบเปเบเปเบซเบฅเบทเปเบญเบกเปเบชเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ, เบเบปเบเบซเบกเบฒเบเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบญเบตเปเบกเบงเบเบญเบเบเบนเปเปเบเป. เบเปเปเปเบ, เบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเปเบซเบเบเบฒเบเปเบกเปเบเปเบเบปเปเบฒเปเบเปเบเปเบเบฅเป transformations.log, เบเบตเปเบเบญเบเบงเบฑเบเบเบต.
เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบฒเบเบเปเบญเบเบเบฑเบเบเบญเบ callbacks เปเบฅเบฐเบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบญเบ }) เปเบเบชเปเบงเบเบชเบธเบเบเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ. เบกเบฑเบเบเบทเบเปเบญเบตเปเบเบงเปเบฒ Callback Hell เบซเบผเบท Pyramid of Doom.
เบเปเปเปเบชเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเบตเปเปเบกเปเบเปเบซเบฑเบเปเบเปเบเบฑเบเปเบเบ:
- เบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบเบฒเบเบเบตเปเบเบฐเบญเปเบฒเบ.
- เบกเบฑเบเบเบฑเบเบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเปเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ, เปเบเบดเปเบเบกเบฑเบเบเบฐเปเบฎเบฑเบเปเบซเปเบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเบเบต.
เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเปเบฒเบชเบฑเบเบเบฒเปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบ JavaScript. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบเบทเปเบญเบเบปเบเปเบเบเบเบฒเบเบฎเบฑเบเปเบฅเบดเบเบเบญเบ callbacks เบเบฑเบเบเปเบฒเบงเปเบฒ .เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ.
เบฅเบฑเบเบชเบฐเบเบฐเปเบเบเบฒเบเบเบงเบเบเบญเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเปเบกเปเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบฎเบฑเบเปเบซเปเบฅเบฐเบซเบฑเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเบเบตเบเบถเปเบเบซเบผเบฒเบ, เบเบฒเบเปเบเบดเบเบฅเบปเบเบฅเบธเปเบกเปเบเบเบเบตเปเบเบฐเบเบฒเบเบเปเบฒเบเปเบเบเบงเบฒ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบชเบฑเบเบเบฒเบเบฑเบเบกเบตเบเบฑเบเบซเบฒเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒ:
- เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบซเบผเบฒเบ .เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ.
- เปเบเบเบเบตเปเบเบฐเบฅเบญเบ/เบเบฑเบ, .catch เปเบกเปเบเปเบเปเปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฑเบเปเบปเบ.
- เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบซเบผเบฒเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบเบฒเบเปเบเบซเบเบถเปเบ loop เปเบกเปเบเบเปเปเบชเบฐเบเบงเบเบชเบฐเปเบซเบกเบต;
เบเบตเปเปเบกเปเบเบเบฑเบเบซเบฒเบเบตเปเบเบฐเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบงเบฒเบกเบซเบกเบฒเบเบเบญเบเบเบธเบเบชเบธเบเบเปเบฒเบ.
เบชเบปเบกเบกเบธเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบต for loop เบเบตเปเบเบดเบกเบฅเปเบฒเบเบฑเบเบเบญเบเบเบปเบงเปเบฅเบเบเบฒเบ 0 เบซเบฒ 10 เปเบเบเปเบงเบเปเบงเบฅเบฒเบชเบธเปเบก (0โn เบงเบดเบเบฒเบเบต). เบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฝเบ loop เบเบตเปเปเบเบทเปเบญเปเบซเปเบเบปเบงเปเบฅเบเบเบทเบเบเบดเบกเบเบฒเบกเบฅเปเบฒเบเบฑเบเบเบฒเบ 0 เบซเบฒ 10. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบกเบฑเบเปเบเปเปเบงเบฅเบฒ 6 เบงเบดเบเบฒเบเบตเปเบเบทเปเบญเบเบดเบกเบชเบนเบเปเบฅเบฐ 2 เบงเบดเบเบฒเบเบตเปเบเบทเปเบญเบเบดเบกเบซเบเบถเปเบ, เบชเบนเบเบเบงเบเบเบฐเบเบดเบกเบเปเบญเบ, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ. เบเบฒเบเบเบฑเบเบเบญเบเบซเบผเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบดเบกเบซเบเบถเปเบเบเบฐเปเบฅเบตเปเบกเบเบปเปเบ.
เปเบฅเบฐเปเบเปเบเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเปเบเป Async/Await เบซเบผเบท .sort เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป. เบเบฒเบเปเบเปเปเบเบเบปเบงเบขเปเบฒเบเปเบกเปเบเบขเบนเปเปเบเบเบญเบเบเปเบฒเบเบเบญเบ.
เบเบฑเบเบเบฑเบ Async
เบเบฒเบเปเบเบตเปเบกเบเบฑเบเบเบฑเบ async เปเบ ES2017 (ES8) เปเบฎเบฑเบเปเบซเปเบงเบฝเบเบเบฒเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบชเบฑเบเบเบฒเบเปเบฒเบเบเบถเปเบ. เบเปเบญเบเบชเบฑเบเปเบเบเบงเปเบฒเบเบฑเบเบเบฑเบ async เปเบฎเบฑเบเบงเบฝเบ "เบขเบนเปเปเบเบดเบ" เบเบญเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒ. เบซเบเปเบฒเบเบตเปเปเบซเบผเบปเปเบฒเบเบตเปเบเปเปเปเบเปเบชเบฐเปเบเบเปเบเบดเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเบฒเบเบเปเบฒเบเบเบธเบเบเบฐเบเบฒเบ. เบเบฑเบเบเบฑเบ Async เบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบเปเบเปเบฒเบชเบฑเบเบเบฒ.
Async/Await เปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเบฑเบเบฅเบฐเบเบฝเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบฅเบฐเบซเบฑเบ asynchronous เปเบเบฎเบนเบเปเบเบ synchronous.
เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบฎเบนเปเบเปเบฒเบชเบฑเบเบเบฒเปเบฎเบฑเบเปเบซเปเบกเบฑเบเบเปเบฒเบเบเปเปเบเบฒเบเปเบเบปเปเบฒเปเบเบซเบผเบฑเบเบเบฒเบเบเบญเบ Async/Await.
syntax
เปเบเบเบเบปเบเบเบฐเบเบดเบกเบฑเบเบเบฐเบเบญเบเบเปเบงเบเบชเบญเบเบเปเบฒเบชเปเบฒเบเบฑเบ: async เปเบฅเบฐเบฅเปเบเปเบฒ. เบเปเบฒเบเปเบฒเบญเบดเบเบเปเบฝเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบ asynchronous. เบซเบเปเบฒเบเบตเปเบเบฑเปเบเบเปเบฒเบงเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเปเบเปเบฅเปเบเปเบฒ. เปเบเบเปเบฅเบฐเบเบตเบญเบทเปเบเป, เบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบเบฑเบเบเบตเปเบเบฐเบชเปเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ.
// 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! เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบทเปเปเบงเปเบงเปเบฒเบเบปเบงเบชเปเบฒเบเบเบฑเปเบเบฎเบฝเบเปเบฅเบฐ getters / setters เบเปเปเบชเบฒเบกเบฒเบเบเปเปเบเบดเปเบ.
Semantics เปเบฅเบฐเบเบปเบเบฅเบฐเบเบฝเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ
เบเบฑเบเบเบฑเบ Async เปเบเบเบเบทเปเบเบเบฒเบเปเบฅเปเบงเปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบเบฑเบเบเบฑเบ JS เบกเบฒเบเบเบฐเบเบฒเบ, เปเบเปเบกเบตเบเปเปเบเบปเบเปเบงเบฑเปเบ.
เบเบฑเปเบเบเบฑเปเบ, เบเบฑเบเบเบฑเบ async เบชเบฐเปเบซเบกเบตเบเบฑเบเบเบทเบเบเปเบฒเบชเบฑเบเบเบฒ:
async function fn() {
return 'hello';
}
fn().then(console.log)
// hello
เปเบเบเบชเบฐเปเบเบฒเบฐ, fn เบชเบปเปเบเบเบทเบเบชเบฐเบเบฃเบดเบเบชเบฐเบเบฒเบเบเบต. เบเบต, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเบฑเบเบเบฑเบ asynchronous, เบเปเบฒเบชเบฐเบเบฃเบดเบเบเบทเบเบซเปเปเบเปเบงเบเบชเบฑเบเบเบฒเปเบเบเปเบเปเบเบปเบงเบชเปเบฒเบ.
เบเบตเปเปเบกเปเบเบเบฒเบเบญเบญเบเปเบเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเปเปเบกเบต Async:
function fn() {
return Promise.resolve('hello');
}
fn().then(console.log);
// hello
เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเปเบฒเบชเบฑเบเบเบฒเบเบฐเบเบทเบเบชเบปเปเบเบเบทเบ "เบเปเบงเบเบเบปเบเปเบญเบ". เบเบฑเบเบเบฑเบเบญเบฐเบเบดเบเปเบเบเปเบกเปเบเบเบทเบเบซเปเปเปเบงเปเปเบเบชเบฑเบเบเบฒเปเปเปเบชเบฐเปเปเบต.
เบเปเบฒเบเปเบฒเบเบฑเบเบเบทเบเปเบกเปเบเปเบเบทเปเบญเบเบเบปเปเบ, เบเบฑเบเบเบฑเบ async เบเบญเบเบเปเบฒเปเบเบเบเบฒเบเบซเปเปเบกเบฑเบเปเบงเปเปเบเบชเบฑเบเบเบฒ. เบเปเบฒเบเปเบฒเบเบฑเบเบเบทเบเปเบกเปเบเบงเบฑเบเบเบธเบชเบฑเบเบเบฒ, เบเบฒเบเปเบเปเปเบเบเบญเบเบกเบฑเบเบเบฐเบเบทเบเบชเบปเปเบเบเบทเบเปเบเบเปเบฒเบชเบฑเบเบเบฒเปเบซเบกเป.
const p = Promise.resolve('hello')
p instanceof Promise;
// true
Promise.resolve(p) === p;
// true
เปเบเปเบเบฐเปเบเบตเบเบซเบเบฑเบเบเบถเปเบเบเปเบฒเบกเบตเบเปเปเบเบดเบเบเบฒเบเบเบฒเบเปเบเบเบฑเบเบเบฑเบเบเปเปเบเบดเปเบ?
async function foo() {
throw Error('bar');
}
foo().catch(console.log);
เบเปเบฒเบกเบฑเบเบเปเปเปเบเปเบเบทเบเบเบธเบเปเบเปเบ, foo() เบเบฐเบชเบปเปเบเบเบทเบเบเปเบฒเบชเบฑเบเบเบฒเบเปเบงเบเบเบฒเบเบเบฐเบเบดเปเบชเบ. เปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบตเป, Promise.reject เบเบตเปเบกเบตเบเปเปเบเบดเบเบเบฒเบเบเบฐเบเบทเบเบชเบปเปเบเบเบทเบเปเบเบ Promise.resolve.
เบเบฑเบเบเบฑเบ Async เบชเบฐเปเบซเบกเบตเปเบซเปเบเปเบฒเบชเบฑเบเบเบฒ, เปเบเบเบเปเปเบเปเบฒเบเบถเบเปเบเบดเบเบชเบดเปเบเบเบตเปเบเบทเบเบชเบปเปเบเบเบทเบ.
เบเบฑเบเบเบฑเบ Asynchronous เบขเบธเบเบเบปเปเบงเบเบฒเบงเปเบเบเบธเบเปเบเบฒเบเบฅเปเบเปเบฒ .
Awai เบกเบตเบเบปเบเบเบฐเบเบปเบเบเปเปเบเบฒเบเบชเบฐเปเบเบเบญเบญเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฒเบเบชเบฐเปเบเบเบญเบญเบเปเบเบฑเบเบเปเบฒเบชเบฑเบเบเบฒ, เบซเบเปเบฒเบเบตเป 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 = เบฅเปเบเบญเบ 9; in const a = เบฅเปเบเบญเบ Promise.resolve(9);.
- เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเปเบฒเปเบเป Await, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบฐเบเบทเบเบฅเบฐเบเบฑเบเบเบปเบเบเปเบงเบฒ a เปเบเปเบฎเบฑเบเบกเบนเบเบเปเบฒเบเบญเบเบกเบฑเบ (เปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฐเบเบธเบเบฑเบเบกเบฑเบเปเบกเปเบ 9).
- delayAndGetRandom(1000) เบขเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเบเบเบฑเบ fn เปเบงเปเบเบปเปเบงเบเบฒเบงเบเบปเบเบเบงเปเบฒเบกเบฑเบเบเบฐเบชเบณเปเบฅเบฑเบเปเบญเบ (เบซเบผเบฑเบเบเบฒเบ 1 เบงเบดเบเบฒเบเบต). เบญเบฑเบเบเบตเปเบขเบธเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ fn เบขเปเบฒเบเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเบฑเบเปเบงเบฅเบฒ 1 เบงเบดเบเบฒเบเบต.
- delayAndGetRandom(1000) เบเปเบฒเบเบเบฒเบเปเบเปเปเบเบชเบปเปเบเบเบทเบเบเปเบฒเบชเบธเปเบก, เปเบเบดเปเบเบเบทเบเบกเบญเบเปเบฒเบเปเบซเปเบเบฑเบเบเบปเบงเปเบ b.
- เบเบต, เบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบปเบงเปเบ c เปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบปเบงเปเบ a. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบขเบธเบเปเบเบปเบฒเบชเปเบฒเบฅเบฑเบเบงเบดเบเบฒเบเบต, เปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบ delayAndGetRandom (1000) เบเบฑเบเบเบทเบเบกเบฒเบเปเปเบกเบตเบซเบเบฑเบเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเปเปเบเปเบฒเปเบเบฑเบ.
- เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเปเบฒเบเปเปเบเปเบเบทเบเบเบดเบเปเบฅเปเปเบเบเปเบเปเบชเบนเบ a + b * c. เบเบปเบเปเบเปเบฎเบฑเบเปเบกเปเบเบซเปเปเบขเบนเปเปเบเบเปเบฒเบชเบฑเบเบเบฒเปเบเบเปเบเป Promise.resolve เปเบฅเบฐเบชเบปเปเบเบเบทเบเปเบเบเบเบฑเบเบเบฑเบ.
เบเบฒเบเบขเบธเบเบเบปเปเบงเบเบฒเบงเปเบซเบผเบปเปเบฒเบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบเบฒเบเบฅเบฐเบเบถเบเปเบเบดเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบเปเบฒเปเบ ES6, เปเบเปเบกเบตเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบเบกเบฑเบ
เบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒ
เปเบฅเปเบง, เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบงเบดเบเบตเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเปเบเปเบฒเบงเบกเบฒเบเปเบฒเบเปเบเบดเบ.
เบเบฑเบเบเบฑเบ finishMyTask เปเบเป Await เปเบเบทเปเบญเบฅเปเบเปเบฒเบเบปเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบฑเปเบ: queryDatabase, sendEmail, logTaskInFile, เปเบฅเบฐเบญเบทเปเบเป. เบเปเบฒเบเปเบฒเบเบเบฝเบเบเบฝเบเบเบฒเบเปเบเปเปเบเบเบตเปเบเบฑเบเบเปเบฒเบชเบฑเบเบเบฒเบเบตเปเบเบทเบเบเปเบฒเปเบเป, เบเบงเบฒเบกเบเปเบฒเบเบเบทเบเบฑเบเบเบฐเบเบฒเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบ. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบฎเบธเปเบ Async/Await เบเปเบงเบเปเบซเปเบเบงเบฒเบกเบเบฑเบเบเปเบญเบ syntactic เบเบฑเบเปเบปเบเบเปเบฒเบเบเบถเปเบ. เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเป, เบเปเปโเบกเบตโเบเปเบฒโเบเบงเบโเบเบฐโเบซเบเบฒเบโเปเบซเบเปโเบเบญเบ callbacks เปเบฅเบฐโเบเปเบญเบโเปเบชเปโเปเบเบฑเปเบ .then/.catch.
เบเบตเปเปเบกเปเบเบเบฒเบเปเบเปเปเบเบเบตเปเบกเบตเบเบปเบเบเบฐเบฅเบดเบเบเบญเบเบเบปเบงเปเบฅเบ, เบกเบตเบชเบญเบเบเบฒเบเปเบฅเบทเบญเบ.
const wait = (i, ms) => new Promise(resolve => setTimeout(() => resolve(i), ms));
// Implementation One (Using for-loop)
const printNumbers = () => new Promise((resolve) => {
let pr = Promise.resolve(0);
for (let i = 1; i <= 10; i += 1) {
pr = pr.then((val) => {
console.log(val);
return wait(i, Math.random() * 1000);
});
}
resolve(pr);
});
// Implementation Two (Using Recursion)
const printNumbersRecursive = () => {
return Promise.resolve(0).then(function processNextPromise(i) {
if (i === 10) {
return undefined;
}
return wait(i, Math.random() * 1000).then((val) => {
console.log(val);
return processNextPromise(i + 1);
});
});
};
เปเบฅเบฐเบเบตเปเปเบกเปเบเบเบฒเบเปเบเปเปเบเปเบเบเปเบเปเบเบฑเบเบเบฑเบ async.
async function printNumbersUsingAsync() {
for (let i = 0; i < 10; i++) {
await wait(i, Math.random() * 1000);
console.log(i);
}
}
เบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบดเบเบเบฒเบ
เบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเบเบฒเบเปเบกเปเบเบซเปเปเบขเบนเปเปเบเบเปเบฒเบชเบฑเบเบเบฒเบเบตเปเบเบทเบเบเบฐเบเบดเปเบชเบ. เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเบฑเบเบเบฑเบ async เบชเบฒเบกเบฒเบเปเบเป try/catch เปเบเบทเปเบญเบเบฑเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเปเปเบเบ synchronously.
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 เบเบฑเบเบเบฑเบเบเบฐเบชเบดเปเบเบชเบธเบเบเปเบงเบ undefined (เปเบกเบทเปเบญเบเปเปเบกเบตเบซเบเบฑเบเบเบทเบเบชเบปเปเบเบเบทเบเปเบ try block) เบซเบผเบทเบกเบตเบเปเปเบเบดเบเบเบฒเบเบเบตเปเบเบทเบเบเบฑเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฑเบเบเบฑเบเบเบตเปเบเบฐเบเปเปเบฅเบปเปเบกเปเบซเบฅเบงเปเบเบฒเบฐเบงเปเบฒเบเบฒเบเบเบฐเบเบฒเบเบฒเบก / เบเบฑเบเบเบฐเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเบ foo เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ.
เบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบญเบทเปเบ:
async function foo() {
try {
return canRejectOrReturn();
} catch (e) {
return 'error caught';
}
}
เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเบเบปเบงเบขเปเบฒเบ, canRejectOrReturn เบเบทเบเบชเบปเปเบเบเบทเบเบเบฒเบ foo. Foo เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเปโเบเบฑเบโเบซเบกเบปเบโเบเบตเปโเบกเบตโเบเปเบฒโเบเบงเบโเบเบตเปโเบชเบปเบกโเบเบนเบโเปเบเบโเบซเบผเบทโเบเบฑเบโเบเบทเบโเบกเบฒโเบเบงเบฒเบกโเบเบดเบโเบเบฒเบ (โเบเปโเบญเบฐโเปเบ, เบเบปเบงโเปเบฅเบโเปเบซเบเปโเปเบเบตเบโเปเบโ). เบเบฑเบเบเบฑเบเบเบฐเบเปเปเบเบทเบเบเบฐเบเบดเบเบฑเบ.
เบเบฑเบเบซเบฒเปเบกเปเบเบงเปเบฒ foo เบเบฑเบเบเบทเบเบเปเบฒเบชเบฑเบเบเบฒเบเบตเปเบเปเบฒเบเบเบฒเบ canRejectOrReturn. เบเบฑเปเบเบเบฑเปเบเบเบฒเบเปเบเปเปเบ foo เบเบฒเบเปเบเบฑเบเบเบฒเบเปเบเปเปเบ canRejectOrReturn. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบฅเบฐเบซเบฑเบเบเบฐเบเบฐเบเบญเบเบเปเบงเบเบเบฝเบเปเบเปเบชเบญเบเปเบชเบฑเปเบ:
try {
const promise = canRejectOrReturn();
return promise;
}
เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบทเปเบเบเปเบฒเบเปเบฒเบเปเบเปเบฅเปเบเปเบฒเปเบฅเบฐเบเบฑเบเบเบทเบเบฎเปเบงเบกเบเบฑเบ:
async function foo() {
try {
return await canRejectOrReturn();
} catch (e) {
return 'error caught';
}
}
เปเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเปเบเบดเบ, foo เบเบฐเบญเบญเบเบขเปเบฒเบเบชเปเบฒเปเบฅเบฑเบเบเบปเบเปเบเบเบกเบตเบเบฑเบเบเบปเบงเปเบฅเบเบเบตเปเบชเบปเบกเบเบนเบเปเบเบเปเบฅเบฐเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบเบทเบเบเบฑเบ. เบเบฐเบเปเปเบกเบตเบเบฒเบเบเบฐเบเบดเปเบชเบเบขเบนเปเบเบตเปเบเบตเป. เปเบเป foo เบเบฐเบเบฑเบเบเบทเบเบกเบฒเบเปเบงเบ canRejectOrReturn, เบเปเปเปเบกเปเบเปเบเบเบเปเปเปเบเปเบเปเบฒเบเบปเบ. เปเบซเปเปเบซเปเปเบเปเปเบเบงเปเบฒเบเบตเปเปเบเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฑเบเบเบทเบเบเบตเปเบฅเปเบเปเบฒ canRejectOrReturn() line:
try {
const value = await canRejectOrReturn();
return value;
}
// โฆ
เบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบปเปเบงเปเบ เปเบฅเบฐเบเบงเบฒเบกเบเบดเบเบเบฒเบ
เปเบเบเบฒเบเบเปเบฅเบฐเบเบต, เบเบฒเบเบเปเบฒเปเบเป Async/Await เบชเบฒเบกเบฒเบเบเปเบฒเปเบเบชเบนเปเบเบงเบฒเบกเบเบดเบเบเบฒเบ.
เบฅเบทเบกเบฅเปเบเปเบฒ
เบเบตเปเปเบเบตเบเบเบถเปเบเปเบฅเบทเปเบญเบเป - เบเปเบฒเบชเปเบฒเบเบฑเบเบเบตเปเบฅเปเบเปเบฒเบเบทเบเบฅเบทเบกเบเปเบญเบเบเปเบฒเบชเบฑเบเบเบฒ:
async function foo() {
try {
canRejectOrReturn();
} catch (e) {
return 'caught';
}
}
เบเบฑเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, เบเปเปเบกเบตเบเบฒเบเบฅเปเบเปเบฒเบซเบผเบทเบเบฑเบเบเบทเบเบกเบฒเปเบเบฅเบฐเบซเบฑเบ. เบเบฑเปเบเบเบฑเปเบ foo เบชเบฐเปเบซเบกเบตเบญเบญเบเปเบเบเบเปเปเปเบเปเบเปเบฒเบเบปเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเบเปเบฒ 1 เบงเบดเบเบฒเบเบต. เปเบเปเบเปเบฒเบชเบฑเบเบเบฒเบเบฐเบชเปเบฒเปเบฅเบฑเบ. เบเปเบฒเบกเบฑเบเบเบดเปเบกเบเบงเบฒเบกเบเบดเบเบเบฒเบเบซเบผเบทเบเบฒเบเบเบฐเบเบดเปเบชเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ UnhandledPromiseRejectionWarning เบเบฐเบเบทเบเปเบญเบตเปเบ.
เบเบฑเบเบเบฑเบ Async เปเบ Callbacks
เบเบฑเบเบเบฑเบ Async เปเบกเปเบเบเปเบญเบเบเปเบฒเบเบกเบฑเบเปเบเปเปเบ .map เบซเบผเบท .filter เปเบเบฑเบเบเบฒเบเปเบญเบตเปเบเบเบทเบ. เบเบปเบงเบขเปเบฒเบเปเบกเปเบเบเบฑเบเบเบฑเบ fetchPublicReposCount(เบเบทเปเบเบนเปเปเบเป), เปเบเบดเปเบเบชเบปเปเบเบเบทเบเบเปเบฒเบเบงเบเบเบญเบ repositories เปเบเบตเบเบขเบนเปเปเบ GitHub. เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบกเบตเบชเบฒเบกเบเบนเปเปเบเปเบเบตเปเบกเบต metrics เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบ. เบเบตเปเปเบกเปเบเบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบฒเบเบเบตเป:
const url = 'https://api.github.com/users';
// Utility fn to fetch repo counts
const fetchPublicReposCount = async (username) => {
const response = await fetch(`${url}/${username}`);
const json = await response.json();
return json['public_repos'];
}
เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฑเบเบเบต ArfatSalman, octocat, norvig. เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบ:
const users = [
'ArfatSalman',
'octocat',
'norvig'
];
const counts = users.map(async username => {
const count = await fetchPublicReposCount(username);
return count;
});
เบกเบฑเบเบเบธเปเบกเบเปเบฒเบเบตเปเบเบฐเปเบซเปเบเบงเบฒเบกเบชเบปเบเปเบเบเบฑเบ Await เปเบ .map callback. เบเบตเปเปเบกเปเบเบเบฒเบเบเบฑเบเปเบเบฑเบเบญเบฒเปเบฃเบเบญเบเบเปเบฒเบชเบฑเบเบเบฒ, เปเบฅเบฐ .map เปเบกเปเบเบเบฒเบเปเบญเบตเปเบเบเบทเบเบเบตเปเบเปเปเปเบเบตเบเปเบเบตเบเบเบทเปเบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเปเบเปเบฅเบฐเบเบปเบเบเบตเปเบฅเบฐเบเบธ.
เบเบฒเบเบเปเบฒเปเบเปเบเบตเปเบชเบญเบเบเปเบญเบเปเบเบตเบเปเบเบฅเปเบเปเบฒ
เปเบซเปเปเบญเบปเบฒเบฅเบฐเบซเบฑเบเบเบตเปเปเบเบฑเบเบเบปเบงเบขเปเบฒเบ:
async function fetchAllCounts(users) {
const counts = [];
for (let i = 0; i < users.length; i++) {
const username = users[i];
const count = await fetchPublicReposCount(username);
counts.push(count);
}
return counts;
}
เบเบตเปเบเบตเป, เบเปเบฒเบเบงเบ repo เปเบกเปเบเบเบทเบเบเบฑเบเปเบชเปเบขเบนเปเปเบเบเบปเบงเปเบเบเบฒเบเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบปเบงเปเบฅเบเบเบตเปเบเบฐเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเบฒเบเบเบฑเบ array. เบเบฑเบเบซเบฒเบเบฑเบเบฅเบฐเบซเบฑเบเปเบกเปเบเบงเปเบฒเบเบปเบเบเปเบงเบฒเบเปเปเบกเบนเบเบเบญเบเบเบนเปเปเบเปเบเปเบฒเบญเบดเบเบกเบฒเบฎเบญเบเบเบฒเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ, เบเบนเปเปเบเปเบเปเปเบกเบฒเบเบฑเบเบซเบกเบปเบเบเบฐเบขเบนเปเปเบเปเบซเบกเบเบชเบฐเปเบเบเบเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฝเบเปเบเปเบซเบเบถเปเบเบเบนเปเปเบเปเบเบทเบเบเบฐเบกเบงเบเบเบปเบเปเบเปเบงเบฅเบฒ.
เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบกเบฑเบเปเบเปเปเบงเบฅเบฒเบเบฐเบกเบฒเบ 300 ms เปเบเบเบฒเบเบเบธเบเปเบเปเบเบซเบเบถเปเบเบเบนเปเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเบเบฑเบเบซเบกเบปเบเบกเบฑเบเปเบกเปเบเปเบฅเปเบงเบงเบดเบเบฒเบเบต; เปเบเปเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเปเบเปเบฎเบฑเบเบเปเบฒเบเบงเบ repo เบเปเปเปเบเปเบเบถเปเบเบเบฑเบเบเบฑเบเปเบฅเบฐเบเบฑเบ, เบเบฐเบเบงเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฒเบเปเบเป. เบญเบฑเบเบเบตเปเบเปเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ .map เปเบฅเบฐ Promise.all:
async function fetchAllCounts(users) {
const promises = users.map(async username => {
const count = await fetchPublicReposCount(username);
return count;
});
return Promise.all(promises);
}
Promise.all เปเบเปเบฎเบฑเบ array เบเบญเบเบชเบฑเบเบเบฒเปเบเบฑเบ input เปเบฅเบฐเบชเบปเปเบเบเบทเบเบเปเบฒเบชเบฑเบเบเบฒ. เบญเบฑเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเบชเปเบฒเปเบฅเบฑเบเบซเบผเบฑเบเบเบฒเบเบชเบฑเบเบเบฒเบเบฑเบเบซเบกเบปเบเปเบ array เบชเปเบฒเปเบฅเบฑเบเบซเบผเบทเบขเบนเปเปเบเบเบฒเบเบเบฐเบเบดเปเบชเบเบเบฑเปเบเบเปเบฒเบญเบดเบ. เบกเบฑเบเบญเบฒเบเบเบฐเปเบเบตเบเบเบทเปเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเบเบฑเบเบซเบกเบปเบเบเปเปเปเบเปเปเบฅเบตเปเบกเบเบปเปเบเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ - เปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบญเบกเปเบเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป p-map.
เบชเบฐเบซเบฅเบธเบ
เบเบฑเบเบเบฑเบ Async เบเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ. เบเบต, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเบฑเบเบเบปเบงเบเบญเบเบเบฑเบเบเบฑเบ async, เบเปเบฒเบเบเบงเบเปเบเป
Skillbox เปเบเบฐเบเปเบฒ:
- เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ
"เบเบนเปเบเบฑเบเบเบฐเบเบฒเบกเบทเบเบท PRO" .- เบซเบผเบฑเบเบชเบนเบเบญเบญเบเปเบฅเบเปเบเบตเปเบชเบฐเบซเบกเบฑเบ
"เบเบฑเบเบงเบดเปเบเบฒเบฐเบเปเปเบกเบนเบ Python" .- เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบญเบเบเบต
"เบเปเบญเบเปเบเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเปเบงเบฑเบ PRO" .
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com