1

JavaScript로 모나드를 배우고 있습니다. Promise 자체는 모나드이며 비동기 부작용을 기능적으로 처리하는 올바른 방법입니다. 어쨌든 es7 새로운 플레이어 async/await, JavaScript의 함수형 프로그래밍에서 사용할 수 있습니까? 나는 그것이 모범이되는 약속 모나드에 대해 잘 정의 된 것처럼 느껴진다. 또는 함수 프로그래밍을 더 쉽게 만들 수있을 정도로 현명하게 비동기/대기 함수를 사용하는 방법이 있습니까?비동기/함수형 프로그래밍에서 아무 곳도 기다리지 않습니다.

+0

나는 그것이 대부분의 사람들이 요구하는 것에 관한 것 같아. 그들은 마치 동기처럼 비동기 코드를 작성하려고합니다. 말하자면 그들은 실제로 명령형 코딩 스타일을 의미합니다. 나는 동의한다, 약속은 환상적이며, 현재는 기능적으로 요구하는 것을 사람들에게 준다. 그러나 사람들은 여전히 ​​그들을 완전히 활용할 수 없다. 그들은 사슬을 엮는 대신 서로 내에서 중첩 약속과 같은 일을합니다. 따라서 현재의 사람들은이 동기화 된 코딩 문제를 해결할 수있는 coroutines를 가지고 있으며, 아마도 대부분의 coroutine은 async로 대체 될 것입니다. 그렇습니다. 저는 비동기로 생각하지 않으며 기능적 JS에 관한 앞으로의 도약을 기다리고 있습니다. – Redu

+0

비동기/대기로 인해 더 많은 명령형 코드를 작성할 수 있습니다. – Ron

+1

Promise는 자동으로 평평하게 된 모나드가 아닙니다. Promise.resolve (Promise.resolve (3))는 약속의 약속이 아닌 int의 약속입니다. 그래도 모나드에게는 좋은 출입구가 있습니다. –

답변

2

비동기 코드는 기능적 스타일로 쓸 수 있습니다. async/await은 설탕 이외에 아무것도 아니며, do 표기법이 하스켈에 있습니다 (단, 약속 및 제네릭 모나드에는 제한됨). 약속을 지키는 코드를 작성하고 async/await으로 단순화하면 사용하십시오.

약속은 종종 부작용을 사용하며 (시간 영역에 있으면서 비동기 자체가 효과로 간주 될 수 있음)주의해야합니다. 따라서 명령형은 종종 잘못된 접근법이 아닙니다. 어쨌든 기능적인 프로그램조차 부작용을 수행한다.