Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
async излишне — мне кажется, что рай на земле наступил бы мгновенно после того, как все функции стали бы неявно async-овыми. В первую очередь я думаю о трапах Proxy — чтобы можно было сделать, скажем, proxy.foo = 123, и это вызвало асинхронный обработчик, который мог бы сколько угодно блокировать вызывающий контекст — пока сходит в интернет, пока скажет, что значение свойства foo обновилось, пока вернется обратно. Полная синхронная семантика.foo.bar = 123 были типа как await foo.setAttr('bar', 123). Ну или, если более многословно и не так корректно, foo.setAttr('bar', 123, (function() { продолжение функции }).bind(this)).x.alpha += x.beta
x.getAttr('alpha', function(alpha) { // f1
y.getAttr('beta', function(beta) { // f2
x.setAttr('alpha', alpha + beta, function() {
// do nothing
}
}
}
x.alpha -= x.gamma
x.getAttr('alpha', function(alpha) { // f3
y.getAttr('gamma', function(gamma) { // f4
x.setAttr('alpha', alpha - gamma, function() {
// do nothing
}
}
}
Почему подобные аргументы не применяются по отношению к коллбэкам, промисам или генераторам?потому что все явно, это ожидаемое поведение
Почему __setattr__ в Python — это явно, а set trap в ES6 Proxy — неявно?не знаю, не достаточно в теме
основополагающих принципов Javascriptпринципы в студию
Уже сейчас можно вклиниться в процесс обычного присвания.Как именно? Думал, что исполняемый кусок кода не прерывается, а события обрабатываются, когда никакой другой код не исполняется. Именно это подразумевал под ожидаемым поведением. А если в каком-то месте ожидание события, то значит, там могут обработаться и другие события(собственно без этого нет и плюсов по сравнению с обычным синхронным вариантом), то есть нарушается атомарность(как будто все выполняется в критических секциях).
вы ещё предлагаете асинхронные действия проводить
Рай, он может так со стороны кажеться, а оказавшись там — увидите, что код станет абсолютно не предсказуем.
async / await и обещания? Сразу видно, что это вы смотрите со стороны. Предположим, десяток последовательных асинхронных задач, необработанная ошибка в одном коллбэке — и всё перестаёт работать, когда с async / await достаточно всё обернуть в один try / catch. > А вы предлагаете все действия проводить синхронно, блокируя поток в однопоточном JS? :) > Вы считаете лапшу из коллбэков более предсказуемой, чем async / await и обещания? new и т.д. Как этого достичь?get вот такая сигнатура — (target, name, proxy): value. Т.е. ответ от нас ожидается сразу же, но у нас его нет — он где-то на другом компьютере, далеко. Есть три варианта:spawn()
.send(target, 'insert', {id: value})
.do(log("inserting..."))
.expect(target, 'inserted', function(result){log(result)})
.do(log("inserted."))
.wait(100)
.start()
запускаем несколько таких очередей, чем не green threadsTask<T> var user = await Service.Fetch(params);. ES7 движется в этом направлении, и с traceur уже можно с этим играться.
Имплементация coroutine в NodeJS