Алексей Распопов
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(); // 1iterator.next(); // 2iterator.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 iteratonasync 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