1

我正在用JavaScript學習monad。 Promise本身就是monad,並且是在功能上處理異步副作用的正確方法。那麼如何es7新玩家異步/等待,我們可以在JavaScript的函數式編程中使用它?我覺得它已經明確地承諾諾言monad回到當務之急。或者有一種方法可以明智地使用異步/等待來讓函數編程更加容易?在函數式編程中是異步/等待沒有地方JavaScript

+0

我想這是關於大多數人要求什麼的。他們希望編寫異步代碼,就好像同步。通過這樣說他們實際上意味着命令性的編碼風格。我同意,承諾是太棒了,目前給他們他們要求的功能,但人們仍然不能充分利用它們。他們做事情,比如嵌套承諾而不是鏈接。所以對於那些在這一刻他們有解決這個同步編碼問題的協同程序,很可能協程將被異步和等待替換。是的,我不認爲異步並等待介紹功能JS的任何前進的飛躍。 – Redu

+0

我覺得異步/等待可能會鼓勵我們編寫更多命令式的代碼。 – Ron

+1

請注意Promise是* not * monad,因爲它們自動變平'Promise.resolve(Promise.resolve(3))'是int的承諾,而不是承諾的承諾。雖然有一個很好的門戶monads。 –

回答

2

您仍然可以用它的功能樣式編寫異步代碼。 async/await只是糖,就像do表示法在Haskell中(儘管它僅限於承諾而不是泛型單子)。如果您使用承諾編寫代碼,並覺得async/await可以簡化它,然後使用它。

請注意,承諾經常使用副作用(和異步本身,通過在時間範圍內,可能會算作一種效果),所以一個命令式的風格往往不是錯誤的方法。畢竟,即使是功能性程序也會產生副作用。