Алексей Распопов
whoami
Общение с другими сервисами/базами данных, события в окружении, прочее.
Тип параллельных вычислений, который подразумевает, что операция может быть выполнена кем-то на стороне, за пределами текущего вычислительного устройства.
Можно выполнять несколько асинхронных операций одновременно.
Результат работы нужно ждать.
get('/resources', (resources) => {
renderResources(resources);
});
get('/resources').then((resources) => {
renderResources(resources);
});
function main() {
try {
let resources = getResources();
render(resources);
} catch (error) {
// wow
}
}
function main() {
getResources()
.then((resources) => {
render(resources);
})
.catch((error) => {
// wow
})
}
function main() {
getResources()
.then((resources) => {
render(resources);
})
.catch((error) => {
// wow
})
.finally(() => {
// hell yeah
})
}
return
async/await
function main() {
try {
let resources = getResources();
render(resources);
} catch (error) {
// wow
}
}
async function main() {
try {
let resources = await getResources();
render(resources);
} catch (error) {
// wow
}
}
async function a() {
let status;
do {
status = await get('/status');
// ...
} while (status !== 'COMPLETED');
return result;
}
function* numbers() {
yield 1;
yield 2;
return 3;
}
const iterator = numbers();
iterator.next(); // 1
iterator.next(); // 2
iterator.next(); // 3
co(function*() {
var str = yield read(‘secret-passwords.txt’);
str = str.replace(‘qwerty’, ‘123456’);
yield write(‘new-passwords.txt’, str);
});
npm install co
browserify code.js > bundle.js
const getResources = co.wrap(function* (name) {
try {
const data = yield fetch(`/resources/${name}`);
// ...
return result;
} catch (error) {
// wow
}
});
[1, 2, 3, 4]
.map(n => n * 3)
.filter(n => n < 10)
function* getNames(users) {
for (let user of users)
yield user.name;
}
function* isAdult(users) {
for (let user of users)
if (user.age > 18) yield user;
}
for (let user of getNames(isAdult(users))) {
render(user);
}
async iteraton
async function* getCompanies() {
for (let name of ['Alex', 'Ann', 'Vlad']) {
const profile = await get(`/users/${name}`);
yield profile.company;
}
}
for await (let company of getCompanies()) {
console.log(company);
}
Ссылка на эти слайды:
alexeyraspopov.github.io/es-async-future