Является ли async/await неуместным в функциональном программировании JavaScript

Я изучаю монаду с помощью JavaScript. Promise сам по себе является монадой и является правильным способом функциональной обработки асинхронных побочных эффектов. Как насчет нового плеера es7 async/await, можем ли мы использовать его в функциональном программировании JavaScript? Я чувствую, что хорошо определенная монада обещания возвращается к императивному пути. Или есть способ использовать async/await достаточно разумно, чтобы сделать программирование функций еще проще?


person Ron    schedule 14.08.2016    source источник
comment
Я думаю, это больше о том, что большинство людей просят. Они хотят писать асинхронный код как синхронный. Говоря так, они на самом деле имеют в виду императивный стиль кодирования. Я согласен, обещания — это фантастика, и в настоящее время они дают им то, что они просят функционально, но люди все еще не могут полностью их использовать. Они делают такие вещи, как вложение обещаний друг в друга вместо цепочки. Так что для тех, у кого на данный момент есть сопрограммы, которые решают эту проблему синхронного кодирования, и, скорее всего, сопрограммы будут заменены на асинхронные и ожидающие. Да, я не думаю, что асинхронность и ожидание представляют какой-либо скачок вперед в отношении функционального JS.   -  person Redu    schedule 14.08.2016
comment
Я чувствую, что async/await может подтолкнуть нас к написанию более императивного кода.   -  person Ron    schedule 15.08.2016
comment
Обратите внимание, что Promises не являются монадами, поскольку они автоматически сглаживаются. Promise.resolve(Promise.resolve(3)) — это promise of the int, а не promise of promise. Однако есть хороший шлюз для монад.   -  person Jared Smith    schedule 15.08.2016


Ответы (1)


Вы по-прежнему можете писать асинхронный код в функциональном стиле. async/await - это не что иное, как сахар, точно так же, как нотация do в Haskell (хотя она ограничена промисами, а не общими монадами). Если вы пишете код с промисами и чувствуете, что async/await упростит его, используйте его.

Обратите внимание, что промисы часто используют побочные эффекты (и сама асинхронность, находясь во временной области, может считаться эффектом), поэтому императивный стиль часто не является неправильным подходом. Ведь даже функциональные программы имеют побочные эффекты.

person Bergi    schedule 14.08.2016