āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻā§āĻĄ āϞāĻŋāĻāϤ⧠āĻĻā§āϝāĻŧ āϝā§āύ āĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏāĨ¤
Async āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ Chrome, Edge, Firefox āĻāĻŦāĻ Safari-āĻ āĻĄāĻŋāĻĢāϞā§āĻāϰā§āĻĒā§ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋ āĻŦā§āĻļ āϏā§āĻĒāώā§āĻāϤāĻ āĻ āϏāĻžāϧāĻžāϰāĻŖāĨ¤ āϤāĻžāϰāĻž āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻā§āĻĄ āϞā§āĻāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧ āϝā§āύ āĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ, āĻāĻŋāύā§āϤ⧠āĻŽā§āϞ āĻĨā§āϰā§āĻĄ āĻŦā§āϞāĻ āύāĻž āĻāϰā§āĨ¤ āϤāĻžāϰāĻž āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻā§āĻĄ āĻāĻŽ "āĻāϤā§āϰ" āĻāĻŦāĻ āĻāϰāĻ āĻĒāĻžāĻ āϝā§āĻā§āϝ āĻāϰ⧠āϤā§āϞā§āĨ¤
Async āĻĢāĻžāĻāĻļāύ āĻāĻ āĻŽāϤ āĻāĻžāĻ āĻāϰā§:
async function myFirstAsyncFunction() {
try {
const fulfilledValue = await promise;
} catch (rejectedValue) {
// âĻ
}
}
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϏāĻāĻā§āĻāĻžāϰ āĻāĻā§ async
āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻĢāĻžāĻāĻļāύā§āϰ āĻŽāϧā§āϝ⧠await
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋāϰ await
, āϤāĻāύ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āϏā§āĻĨāĻŋāϰ āύāĻž āĻšāĻāϝāĻŧāĻž āĻĒāϰā§āϝāύā§āϤ āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻāĻāĻāĻŋ āύāύ-āĻŦā§āϞāĻāĻŋāĻ āĻāĻĒāĻžāϝāĻŧā§ āĻŦāĻŋāϰāĻžāĻŽ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāĻŖ āĻšāϞā§, āĻāĻĒāύāĻŋ āĻŽā§āϞā§āϝ āĻĢāĻŋāϰ⧠āĻĒāĻžāĻŦā§āύāĨ¤ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ āĻāϰāϞā§, āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ āĻāϰāĻž āĻŽāĻžāύ āύāĻŋāĻā§āώā§āĻĒ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
āĻŦā§āϰāĻžāĻāĻāĻžāϰ āϏāĻŽāϰā§āĻĨāύ
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻāύāϝāĻŧāύ āϞāĻāĻŋāĻ
āĻŦāϞā§āύ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ URL āĻāύāϤ⧠āĻāĻžāύ āĻāĻŦāĻ āĻĒāĻžāĻ ā§āϝ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āϞāĻ āĻāϰā§āύ⧎ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻĻā§āĻāĻžāϝāĻŧ āϤāĻž āĻāĻāĻžāύā§:
function logFetch(url) {
return fetch(url)
.then((response) => response.text())
.then((text) => {
console.log(text);
})
.catch((err) => {
console.error('fetch failed', err);
});
}
āĻāĻŦāĻ āĻāĻāĻžāύ⧠async āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻ āĻāĻŋāύāĻŋāϏ:
async function logFetch(url) {
try {
const response = await fetch(url);
console.log(await response.text());
} catch (err) {
console.log('fetch failed', err);
}
}
āĻāĻāĻŋ āĻāĻāĻ āϏāĻāĻā§āϝāĻ āϞāĻžāĻāύ, āĻāĻŋāύā§āϤ⧠āϏāĻŽāϏā§āϤ āĻāϞāĻŦā§āϝāĻžāĻ āĻāϞ⧠āĻā§āĻā§āĨ¤ āĻāĻāĻŋ āĻĒāĻĄāĻŧāĻž āϏāĻšāĻ āĻāϰ⧠āϤā§āϞā§, āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āϝāĻžāϰāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻŽ āĻĒāϰāĻŋāĻāĻŋāϤ āϤāĻžāĻĻā§āϰ āĻāύā§āϝāĨ¤
Async āϰāĻŋāĻāĻžāϰā§āύ āĻŽāĻžāύ
Async āĻĢāĻžāĻāĻļāύ āϏāϰā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āĻāĻĒāύāĻŋ await
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻŦāĻž āύāĻž āĻāϰā§āύāĨ¤ āϝ⧠āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ async āĻĢāĻžāĻāĻļāύ āϰāĻŋāĻāĻžāϰā§āύ āϝāĻžāĻ āĻšā§āĻ āύāĻž āĻā§āύ āϏāĻā§āĻā§ āϏāĻŽāĻžāϧāĻžāύ, āĻŦāĻž async āĻĢāĻžāĻāĻļāύ āύāĻŋāĻā§āώā§āĻĒ āϝāĻžāĻ āĻšā§āĻ āύāĻž āĻā§āύ āϏāĻā§āĻā§ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ. āϤāĻžāĻ āĻāϰ āϏāĻžāĻĨā§:
// wait ms milliseconds
function wait(ms) {
return new Promise((r) => setTimeout(r, ms));
}
async function hello() {
await wait(500);
return 'world';
}
âĻ hello()
āĻāϞ āĻāϰāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āϝāĻž "world"
āĻāϰ āϏāĻžāĻĨā§ āĻĒā§āϰāĻŖ āĻāϰ⧠āĨ¤
async function foo() {
await wait(500);
throw Error('bar');
}
âĻ foo()
āĻāϞ āĻāϰāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āϝāĻž Error('bar')
āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ āĻāϰ⧠āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ
āĻāϰāĻ āĻāĻāĻŋāϞ āĻāĻĻāĻžāĻšāϰāĻŖā§ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύā§āϰ āϏā§āĻŦāĻŋāϧāĻž āĻŦā§āĻĻā§āϧāĻŋ āĻĒāĻžāϝāĻŧāĨ¤ āĻŦāϞā§āύ āĻāĻĒāύāĻŋ āĻ āĻāĻļāĻā§āϞāĻŋ āϞāĻ āĻāĻāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āϏā§āĻā§āϰāĻŋāĻŽ āĻāϰāϤ⧠āĻā§āϝāĻŧā§āĻāĻŋāϞā§āύ āĻāĻŦāĻ āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻāĻāĻžāϰāĻāĻŋ āĻĢā§āϰāϤ āĻĻāĻŋāϤ⧠āĻā§āϝāĻŧā§āĻāĻŋāϞā§āύāĨ¤
āĻāĻāĻžāύ⧠āĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āϏāĻš:
function getResponseSize(url) {
return fetch(url).then((response) => {
const reader = response.body.getReader();
let total = 0;
return reader.read().then(function processResult(result) {
if (result.done) return total;
const value = result.value;
total += value.length;
console.log('Received chunk', value);
return reader.read().then(processResult);
});
});
}
āĻāĻŽāĻžāĻā§ āĻĻā§āĻā§āύ, āĻā§āϝāĻžāĻ "āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋāϰ āĻāĻžāϞāĻ" āĻāϰā§āĻāĻŋāĻŦāϞā§āĻĄāĨ¤ āĻĻā§āĻā§āύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āϞā§āĻĒ āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āύāĻŋāĻā§āϰ āĻāĻŋāϤāϰ⧠processResult()
āĻāϞ āĻāϰāĻāĻŋ? āϞā§āĻāĻžāĻāĻŋ āĻāĻŽāĻžāĻā§ āĻā§āĻŦ āϏā§āĻŽāĻžāϰā§āĻ āĻŽāύ⧠āĻāϰā§āĻā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ "āϏā§āĻŽāĻžāϰā§āĻ" āĻā§āĻĄā§āϰ āĻŽāϤā§, āĻāĻāĻŋ āĻā§ āĻāϰāĻā§ āϤāĻž āĻŦā§āĻāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻāĻāĻŋāϰ āĻĻāĻŋāĻā§ āϤāĻžāĻāĻŋāϝāĻŧā§ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§, 90 āĻāϰ āĻĻāĻļāĻā§āϰ āϏā§āĻ āĻŽā§āϝāĻžāĻāĻŋāĻ-āĻāĻ āĻāĻŦāĻŋāϰ āĻŽāϤā§āĨ¤
āĻāϏā§āύ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻŦāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ:
async function getResponseSize(url) {
const response = await fetch(url);
const reader = response.body.getReader();
let result = await reader.read();
let total = 0;
while (!result.done) {
const value = result.value;
total += value.length;
console.log('Received chunk', value);
// get the next result
result = await reader.read();
}
return total;
}
āϏāĻŽāϏā§āϤ "āϏā§āĻŽāĻžāϰā§āĻ" āĻāϞ⧠āĻā§āĻā§āĨ¤ āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āϞā§āĻĒ āϝāĻž āĻāĻŽāĻžāĻā§ āĻāϤ āϏā§āĻŽāĻžāĻ āĻŦā§āϧ āĻāϰā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāϏā§āϤ, āĻŦāĻŋāϰāĻā§āϤāĻŋāĻāϰ, āϝāĻāύ-āϞā§āĻĒ āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧā§āĻā§āĨ¤ āĻ
āύā§āĻ āĻāĻžāϞā§āĨ¤ āĻāĻŦāĻŋāώā§āϝāϤā§, āĻāĻĒāύāĻŋ āĻ
ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻāĻāĻžāϰā§āĻāϰ āĻĒāĻžāĻŦā§āύ, āϝāĻž while
āϞā§āĻĒāĻā§ āĻāĻāĻāĻŋ for-of āϞā§āĻĒ āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻŦā§, āĻāĻāĻŋāĻā§ āĻāϰāĻ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰ⧠āϤā§āϞāĻŦā§āĨ¤
āĻ āύā§āϝāĻžāύā§āϝ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ
āĻāĻŽāĻŋ āĻāĻĒāύāĻžāĻā§ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ async function() {}
āĻĻā§āĻāĻŋāϝāĻŧā§āĻāĻŋ, āĻāĻŋāύā§āϤ⧠async
āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ āĻ
āύā§āϝ āĻĢāĻžāĻāĻļāύ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏā§āϰ āϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§:
āϤā§āϰ āĻĢāĻžāĻāĻļāύ
// map some URLs to json-promises
const jsonPromises = urls.map(async (url) => {
const response = await fetch(url);
return response.json();
});
āĻ āĻŦāĻā§āĻā§āĻ āĻĒāĻĻā§āϧāϤāĻŋ
const storage = {
async getAvatar(name) {
const cache = await caches.open('avatars');
return cache.match(`/avatars/${name}.jpg`);
}
};
storage.getAvatar('jaffathecake').then(âĻ);
āĻā§āϞāĻžāϏ āĻĒāĻĻā§āϧāϤāĻŋ
class Storage {
constructor() {
this.cachePromise = caches.open('avatars');
}
async getAvatar(name) {
const cache = await this.cachePromise;
return cache.match(`/avatars/${name}.jpg`);
}
}
const storage = new Storage();
storage.getAvatar('jaffathecake').then(âĻ);
āϏāĻžāĻŦāϧāĻžāύ! āĻā§āĻŦ āĻā§āϰāĻŽāĻžāύā§āϏāĻžāϰ⧠āϝāĻžāĻāϝāĻŧāĻž āĻāĻĄāĻŧāĻŋāϝāĻŧā§ āĻāϞā§āύ
āϝāĻĻāĻŋāĻ āĻāĻĒāύāĻŋ āĻā§āĻĄ āϞāĻŋāĻāĻā§āύ āϝāĻž āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāϏ āĻĻā§āĻāĻžāĻā§āĻā§, āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝ⧠āĻāĻĒāύāĻŋ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞāĻāĻžāĻŦā§ āĻāĻŋāĻā§ āĻāϰāĻžāϰ āϏā§āϝā§āĻ āĻŽāĻŋāϏ āĻāϰāĻŦā§āύ āύāĻžāĨ¤
async function series() {
await wait(500); // Wait 500msâĻ
await wait(500); // âĻthen wait another 500ms.
return 'done!';
}
āĻāĻĒāϰā§āϰāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāϤ⧠1000ms āϞāĻžāĻā§, āϝā§āĻāĻžāύā§:
async function parallel() {
const wait1 = wait(500); // Start a 500ms timer asynchronouslyâĻ
const wait2 = wait(500); // âĻmeaning this timer happens in parallel.
await Promise.all([wait1, wait2]); // Wait for both timers in parallel.
return 'done!';
}
āĻāĻĒāϰā§āϰāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāϤ⧠500ms āϞāĻžāĻā§, āĻāĻžāϰāĻŖ āĻāĻāϝāĻŧ āĻ āĻĒā§āĻā§āώāĻž āĻāĻāĻ āϏāĻŽāϝāĻŧā§ āĻāĻā§āĨ¤ āĻāϰ āĻāĻāĻāĻŋ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖ āϤāĻžāĻāĻžāύ.
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻā§āϰāĻŽāĻžāύā§āϏāĻžāϰ⧠āĻāĻāĻāĻĒā§āĻ āĻāϰāĻž
āĻŦāϞā§āύ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āϏāĻŋāϰāĻŋāĻ āĻāĻāĻāϰāĻāϞ āĻāύāϤ⧠āĻāĻžāύ āĻāĻŦāĻ āϝāϤ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āϏāĻŽā§āĻāĻŦ āϏāĻ āĻŋāĻ āĻā§āϰāĻŽā§ āϞāĻ āĻāϰāϤ⧠āĻāĻžāύāĨ¤
āĻāĻā§āϰ āĻļā§āĻŦāĻžāϏ - āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āϏāĻš āĻāĻāĻŋ āĻĻā§āĻāϤ⧠āĻā§āĻŽāύ:
function markHandled(promise) {
promise.catch(() => {});
return promise;
}
function logInOrder(urls) {
// fetch all the URLs
const textPromises = urls.map((url) => {
return markHandled(fetch(url).then((response) => response.text()));
});
// log them in order
return textPromises.reduce((chain, textPromise) => {
return chain.then(() => textPromise).then((text) => console.log(text));
}, Promise.resolve());
}
āĻšā§āϝāĻžāĻ, āĻāĻāĻž āĻ āĻŋāĻ, āĻāĻŽāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻāĻāĻāĻŋ āĻā§āϰāĻŽ āĻā§āĻāύ reduce
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻāĻŋ. āĻāĻŽāĻŋ āĻā§āĻŦ āϏā§āĻŽāĻžāϰā§āĻ . āĻāĻŋāύā§āϤ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ āϤāĻžāĻ āϏā§āĻŽāĻžāϰā§āĻ āĻā§āĻĄāĻŋāĻ āĻāĻžāĻĄāĻŧāĻž āĻāĻĒāύāĻŋ āĻāĻžāϞ āĻŦāύā§āϧ.
āϝāĻžāĻāĻšā§āĻ, āĻāĻĒāϰā§āϰāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻāĻŋ āĻā§āĻŦ āĻā§āϰāĻŽāĻžāύā§āϏāĻžāϰ⧠āϝā§āϤ⧠āϞā§āĻāύā§āϝāĻŧ:
async function logInOrder(urls) { for (const url of urls) { const response = await fetch(url); console.log(await response.text()); } }
function markHandled(...promises) { Promise.allSettled(promises); } async function logInOrder(urls) { // fetch all the URLs in parallel const textPromises = urls.map(async (url) => { const response = await fetch(url); return response.text(); }); markHandled(...textPromises); // log them in sequence for (const textPromise of textPromises) { console.log(await textPromise); } }
reduce
āĻŦāĻŋāĻāĻāĻŋ āĻāĻāĻāĻŋ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ, āĻŦāĻŋāϰāĻā§āϤāĻŋāĻāϰ, āĻĒāĻĄāĻŧāĻžāϰ āĻāύā§āϝ āϞā§āĻĒ āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧāĨ¤āĻŦā§āϰāĻžāĻāĻāĻžāϰ āϏāĻŽāϰā§āĻĨāύ āϏāĻŽāĻžāϧāĻžāύ: āĻā§āύāĻžāϰā§āĻāϰ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻā§āύāĻžāϰā§āĻāϰ āϏāĻŽāϰā§āĻĨāύ āĻāϰ⧠āĻāĻŽāύ āĻŦā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋāĻā§ āϞāĻā§āώā§āϝ āĻāϰ⧠āĻĨāĻžāĻā§āύ (āϝāĻž āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϰāϧāĻžāύ āĻŦā§āϰāĻžāĻāĻāĻžāϰā§āϰ āϏāϰā§āĻŦāĻļā§āώ āϏāĻāϏā§āĻāϰāĻŖ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰā§) āĻāĻĒāύāĻŋ āĻĒāϞāĻŋāĻĢāĻŋāϞ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ āϏāĻžāĻāĻžāϤ⧠āĻĒāĻžāϰā§āύ⧎
Babel āĻāĻĒāύāĻžāϰ āĻāύā§āϝ āĻāĻāĻŋ āĻāϰāĻŦā§, āĻāĻāĻžāύ⧠Babel REPL āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϰāϝāĻŧā§āĻā§ā§ˇ
- āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞāĻĄ āĻā§āĻĄ āĻāϤāĻāĻž āĻ āύā§āϰā§āĻĒ āϤāĻž āύā§āĻ āĻāϰā§āύāĨ¤ āĻāĻ āϰā§āĻĒāĻžāύā§āϤāϰāĻāĻŋ Babel āĻāϰ es2017 āĻĒā§āϰāĻŋāϏā§āĻā§āϰ āĻ āĻāĻļāĨ¤
āĻāĻŽāĻŋ āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞāĻŋāĻ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋ, āĻāĻžāϰāĻŖ āĻāĻĒāύāĻžāϰ āĻāĻžāϰā§āĻā§āĻ āĻŦā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύ āϏāĻŽāϰā§āĻĨāύ āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āĻāĻāĻŋ āĻŦāύā§āϧ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāϤā§āϝāĻŋāĻ āĻāĻāĻāĻŋ āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āύāĻž āĻāĻžāύ āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻŦā§āϝāĻžāĻŦā§āϞā§āϰ āĻĒāϞāĻŋāĻĢāĻŋāϞ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāĻāĻŋ āύāĻŋāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§:
async function slowEcho(val) {
await wait(1000);
return val;
}
âĻāĻāĻĒāύāĻŋ āĻĒāϞāĻŋāĻĢāĻŋāϞ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰāĻŦā§āύ āĻāĻŦāĻ āϞāĻŋāĻāĻŦā§āύ:
const slowEcho = createAsyncFunction(function* (val) {
yield wait(1000);
return val;
});
āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āĻāĻĒāύāĻžāĻā§ createAsyncFunction
āĻāϰāϤ⧠āĻāĻāĻāĻŋ āĻā§āύāĻžāϰā§āĻāϰ ( function*
) āĻĒāĻžāϏ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ await
āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠yield
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϤāĻž āĻāĻžāĻĄāĻŧāĻž āĻāĻāĻŋ āĻāĻāĻ āĻāĻžāĻ āĻāϰā§āĨ¤
āĻāϝāĻŧāĻžāϰā§āĻāĻ ā§āϝāĻžāϰāĻžāĻāύā§āĻĄ: āĻĒā§āύāϰā§āĻāύā§āĻŽāĻāĻžāϰā§
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒā§āϰāĻžāύ⧠āĻŦā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋāĻā§ āĻāĻžāϰā§āĻā§āĻ āĻāϰā§āύ, āϤāĻŦā§ āĻŦā§āϝāĻžāĻŦā§āϞ āĻā§āύāĻžāϰā§āĻāϰāĻā§āϞāĻŋāĻā§ āĻā§āϰāĻžāύā§āϏāĻĒāĻŋāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϝāĻž āĻāĻĒāύāĻžāĻā§ IE8 āĻĒāϰā§āϝāύā§āϤ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ Babel āĻāϰ es2017 āĻĒā§āϰāĻŋāϏā§āĻ āĻāĻŦāĻ es2015 āĻĒā§āϰāĻŋāϏā§āĻ āĨ¤
āĻāĻāĻāĻĒā§āĻ āϤāϤāĻāĻž āϏā§āύā§āĻĻāϰ āύāϝāĻŧ , āϤāĻžāĻ āĻā§āĻĄ-āĻŦā§āϞā§āĻā§āϰ āĻāύā§āϝ āϏāϤāϰā§āĻ āĻĨāĻžāĻā§āύāĨ¤
āϏāĻŦ āĻāĻŋāύāĻŋāϏ āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ!
āϏāĻŽāϏā§āϤ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻā§āĻĄāĻŧā§ async āĻĢāĻžāĻāĻļāύ āϞā§āϝāĻžāύā§āĻĄ āĻāϰāĻžāϰ āĻĒāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ-āϰāĻŋāĻāĻžāϰā§āύāĻŋāĻ āĻĢāĻžāĻāĻļāύ⧠āϏā§āĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ! āϤāĻžāϰāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻĒāύāĻžāϰ āĻā§āĻĄ āĻĒāϰāĻŋāĻĒāĻžāĻāĻŋ āĻāϰ⧠āύāĻž, āĻāĻŋāύā§āϤ⧠āĻāĻāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϝ⧠āĻĢāĻžāĻāĻļāύ āϏāϰā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŦā§āĨ¤
āĻāĻŽāĻŋ 2014 āϏāĻžāϞ⧠āĻ ā§āϝāĻžāϏāĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāύ āϏāĻŽā§āĻĒāϰā§āĻā§ āϏāϤā§āϝāĻŋāĻ āĻāϤā§āϤā§āĻāĻŋāϤ āĻšāϝāĻŧā§āĻāĻŋāϞāĻžāĻŽ, āĻāĻŦāĻ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻŦāĻžāϏā§āϤāĻŦā§ āϤāĻžāĻĻā§āϰ āϞā§āϝāĻžāύā§āĻĄ āĻāϰāϤ⧠āĻĻā§āĻā§ āĻā§āĻŦ āĻāĻžāϞ⧠āϞāĻžāĻāĻā§āĨ¤ āĻāĻĢ!