Open jamesruan opened 10 years ago
Win下没环境,没跑,不过看起来没啥问题,不过这种实现下异步返回可能需要在function内部处理,不过问题也不大。
Monad就是用来做副作用隔离和保证顺序执行的。在Pure Functional里面,大量的语句都是可以并行的,保证顺序性除了最常用直接调用外,还有CPS( Continuation passing Style ),或者直接使用Monad(比如haskell里提供了Monad的语法糖:do)。
在异步环境中,也可以使用Monad。或者用CPS也是不错的选择(CPS适合于顺序执行的操作很相似的时候)
我用你的monad改写了下,然后接下来我有时间再试着往functional改写
额,我那个有写问题的,在同步环境下使用是OK的,但是不知道怎么使用异步函数。这个Monad的原理是确认上一个函数的结果返回后调用下一个函数。异步环境小怎么用我还没搞清楚。
简单的看了下,目前似乎都是对同一个req的多次同步函数调用,这样使用这个monad是没有问题的。
嗯,我重新看了下,发现昨天写的时候有点想茬了,以为异步直接嵌回调进去就行。
这几天我再去看下吧。
A+的定义已经比A简化了不少了,但是A+里面对onFulfilled, onRejected的类型设置地太宽泛,导致要实现then需要走一个比较复杂的流程。 如果把onFulfilled, onRejected的类型限定为一个函数(A+定义允许这种形式),其形式为:
则then的流程就可以简化。
然后我试着实现了这个严格版的promise,
http://jamesruan.github.io/#/blog_promise_is_a_monad.ml.js