Promise是Monad吗?】的更多相关文章

看到一遍好文章,与我的想法如出一辙,先转为敬.首先说说我对Monad和promise的理解: Monad的这种抽象方式是为了简化程序中不确定状态的判断而提出的,能够让程序员从更高的层次顺序描述程序逻辑的每一个动作,而不必关注每一个动作是否会出现异常,也不必关注第一个动作内是否需要逻辑判断,是否要跳转.haskell趣学指南我翻了好几遍,终于对Monad这个概念有了一点认识,这个抽象是伟大的,它极大提高了程序的可读性,同时降低了开发难度.这里还要推荐一下haskell这门语言,Monad的概念就是…
译者按: 近年来,函数式语言的特性都被其它语言学过去了. 原文: Functional Computational Thinking — What is a monad? 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 如果你使用函数式编程,不管有没有用过函数式语言,在某总程度上已经使用过Monad.可能大多数人都不知道什么叫做Monad.在这篇文章中,我不会用数学公式来解释什么是Moand,也不使用Haskell,而是用JavaSc…
转载请注明出处: http://hai.li/2017/03/27/prom... 背景 上篇文章 函数式JS: 一种continuation monad推导 得到了一个类似promise的链式调用,引发了这样的思考:难道promise是monad?如果是的话又是怎样的monad呢?来来来,哥哥带你推倒,哦,不,是推导一下! Monad Monad是haskell里很重要的概念,作为一种类型,有着固定的操作方法,简单的可以类比面向对象的接口. 定义 unit :: a -> Monad a fl…
前言 JavaScript是一门多范式语言,即可使用OOP(面向对象),也可以使用FP(函数式),由于笔者最近在学习React相关的技术栈,想进一步深入了解其思想,所以学习了一些FP相关的知识点,本文纯属个人的读书笔记,如果有错误,望轻喷且提点. 什么是函数式编程 函数式编程(英语:functional programming)或称函数程序设计.泛函编程,是一种编程范式,它将计算机运算视为函数运算,并且避免使用程序状态以及易变对象.即对过程进行抽象,将数据以输入输出流的方式封装进过程内部,从而也…
Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accepts 2 parameters, a function f :: T -> R and a list list :: [T]. [T] is a generic type paramterized by T, it's not the same as T, but definitely shares s…
原文:Callbacks are imperative, promises are functional: Node's biggest missed opportunity promises 天生就不会受不断变化的情况影响. -- Frank Underwood, 'House of Cards' 人们常说Javascript是'函数式'编程语言.而这仅仅因为函数是它的一等值,可函数式编程的很多其他特性,包括不可变数据,递归比循环更招人待见,代数类型系统,规避副作用等,它都不俱备.尽管把函数作…
前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困难.不过一切都是值得的,Swift 相比 Objective-C,写出来的程序更安全.更简洁,最终能够提高我们的工作效率和质量. Swift 相关的学习资料已经很多,我想从另外一个角度来介绍它的一些特性,我把这个角度叫做「烧脑体操」.什么意思呢?就是我们专门挑一些比较费脑子的语言细节来学习.通过「烧…
一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,这有什么难以理解的?* 之前了解了下Monad,后来一段时间没碰,最近研究Parser用到Monad时发现又不懂了.现在重新折腾,趁着记忆还热乎,赶紧写下来.本文不会完整讲解Monad,而只介绍Monad相关的思想与编程技巧. 不要被唬人的数学概念吓唬到了.对于程序员来说,Monad不过就是一种编程技巧,或者说是一种设计模式. Monad并非Haskell特有.实际上,大部分语言都有应用过Monad的思想.下面我将主要使用Sche…
目录 一. 划重点 二. flatMap功能解析 三. flatMap的推演 3.1 函数式编程基础知识回顾 3.2 从一个容器的例子开始 3.3 Monad登场 3.4 对比总结 3.5 一点疑问 四. 资料参考 本文是Rxjs 响应式编程-第二章:序列的深入研究这篇文章的学习笔记. 示例代码托管在:http://www.github.com/dashnowords/blogs 更多博文:<大史住在大前端>目录 一. 划重点 文中使用到的一些基本运算符: map-映射 filter-过滤 r…
译者按: 近年来,函数式语言的特性都被其它语言学过去了.JavaScript异步编程中大显神通的Promise,其实源自于函数式编程的Monad! 原文: Functional Computational Thinking - What is a monad? 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 如果你使用函数式编程,不管有没有用过函数式语言,在某总程度上已经使用过Monad.可能大多数人都不知道什么叫做Monad.在这篇…
将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: 基于事件的粉丝认为线程是一个坏主意,原因有是: 1. 你得显式的协调共享数据的锁,如果你忘记加锁,你就会得到中断坏的数据. 2. 依赖锁导致死锁. 3. 它们难以调试 4. 回调并没有锁 5. 多线程在多核上的性能并不会比每个单核一个线程性能更好. 你应当尽可能地避免线程,对于GUI和分布式系统或低…
Promise 是 JS 异步编程中的重要概念,它较好地解决了异步任务中回调嵌套的问题.在没有引入新的语言机制的前提下,这是如何实现的呢?上手 Promise 时常见若干晦涩的 API 与概念,它们又为什么存在呢?源码里隐藏着这些问题的答案. 下文会在介绍 Promise 概念的基础上,以一步步代码实现 Promise 的方式,解析 Promise 的实现机制.相应代码参考来自 PromiseJS 博客 及 You don’t know JS 的若干章节. Why Promise (有使用 Pr…
ReactiveX Rx的Observable的本质就是一个Event Monad,即上下文(就是图文教程中包裹的盒子)为Event的一个Monad,这里的Event定义,可以对应语言的struct或者enum,包括了next.error和complete三个上下文即可.这里截取的是Swift语言的实现,map方法实现拆装箱(类似Optional,即Haskell的Maybe) public enum Event<Element> { /// Next element is produced.…
对于大多数刚刚入门函数式编程的同学来说,monad(单子.又叫单体)可能是这里面的一道坎.你可能对 map . flatMap 以及 filter 再熟悉不过,可是到了高阶的抽象层次上就又会变得一脸懵逼.其实每个人在学习的阶段都会经历这个过程,不过希望这篇文章能让你重新理解 monad 以及其他相关的概念. Optional Swift 作为一门类型安全的强类型语言,它在编译阶段就会对你的数据类型进行比较多的检查.因此,在 Swift 中我们遇到了一种新的数据类型,叫做 Optional .它的…
版权归作者所有,任何形式转载请联系作者. 作者:tison(来自豆瓣) 来源:https://www.douban.com/note/733279598/ Monad 在实际开发中的应用 不同的人会从不一样的角度接触 Monad.大多数网上的教程和介绍都从其严格的定义出发,加上几个玩具示例就当讲解完毕.诚然,不少 FP 的爱好者都是形式逻辑的拥趸或强于数学的,但是我对 Monad 的理解却不是从其定义入门的.相反,我是先频繁接触了其实例,这其中包括所有开发者都熟悉的列表(List),现代开发者应…
一.promise的组成 1.task:promise要完成的任务: 2.result:处理完的数据: 3.status:状态: 4.fulfill.reject(对应catch) 5.ResolveCallback ErrorCallback promise状态的解释函数 6.resolve: 对promise当前的状态作出解释,已完成的状态立即执行回掉,未完成的状态注册回掉函数: 7.then:前一promise的回掉注册,后一promise的前导: 二.promose状态机: fulfil…
最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下.   一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编程时候代码书写的方式产生的. 随着javascript的发展,异步的场景越来越多.前端有AJAX,setTimeout等,后端Node异步更多.按照传统的做法,那么就是各种回调嵌回调.代码可以把人绕晕. 这个时候,CommonJS社区提出了一个叫做Promise/A+的规范,这个规范定义了如何书写异…
angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state('owner_detail_room',{ url: '/owner_detail_room/{id:[0-9]{1,10}}', views:{ 'main' : { templateUrl:function() { return 'templates/owner_detail_room.htm…
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我们一睹为快! 例子 例子是官方的例子,加载一个英雄列表,点击显示详细信息.我直接放在我们的升级后的装备里面.…
Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js带来强大灵活性的同时,也带来了嵌套回调的问题.详细来说主要有两点,第一嵌套太深代码可读性太差,第二并行逻辑必须串行执行. request = function(url, cb, eb) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange…
最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供基础功能.在用jQuery操作DOM的时候对Promise的使用欲不够强烈,最近学习node和Angular,需要用js写业务逻辑和数据操作代码的时候这种场景需求就出来了.一般来说事件适合在交互场景中运用,因为用户的行为本来就是分散的,而promise这样的流程控制适合在后台逻辑中处理业务. //j…
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一个线程中.因此对于长时间的耗时操作,将会阻塞UI的响应.为了更好的UI体验,应该尽量的避免JavaScript中执行较长耗时的操作(如大量for循环的对象diff等)或者是长时间I/O阻塞的任务.所以在浏览器中的大多数任务都是异步(无阻塞)执行的,例如:鼠标点击事件.窗口大小拖拉事件.定时器触发事件…
一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半年的单身生活.大家一起加油~~ 一直以来,JavaScript处理异步都是以callback的方式,在前端开发领域callback机制几乎深入人心.在设计API的时候,不管是浏览器厂商还是SDK开发商亦或是各种类库的作者,基本上都已经遵循着callback的套路.近几年随着JavaScript开发模式的逐渐成…
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步执行嘛.什么意思,如Ajax异步请求时,就是通过不断监听readyState的值,以确定执行指定的回调函数. 通常的异步执行有三种,回调函数.事件监听以及发布订阅,其中事件监听和发布订阅其实差不多,只是后者更加健壮一些. 如回调函数,回调函数是应用在异步执行中最简单的编程思想.如下: functio…
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/p/5126059.html 主题 PromiseAngularJS 1. $q $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 2. defer defer的字面意思是延迟, $q.defer()  可以创建一个deferre…
下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource){ return $resource('/card/user/:userID/:id',{userID:123,id:'@id'},{charge:{method:'POST',params:{charge:true},isArray:false}}) }); HttpREST.factory('h…
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步的操作)的结果.从语法上说,Pormise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API.各种异步操作都可以用同样的方法进行处理. Promise对象的两个特点: 1.对象的状态不受外界影响.Promis…
有点经验的js前端都知道  ajax异步函数里面的结果不会立即返回,如果你想在一个异步函数得到某个结果后去执行一个语句怎么做? if ( 异步函数 ) { 语句 }  可能很多人都踩过这样坑,这个时候新手一般都找不到问题,左看右看上看下看都是绝对完美的,找不到任何错误; 懂得人就会 把 这句话 放到异步里面去;这样做就没有问题了;但是如果异步里面判断结果后又要做一个异步,里面继续嵌套几个异步......这种情况是常见的; 所以其实 promise 就是以一种优雅的方式来解决这个问题; 提前说明一…
Promise 特点 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:Pending(进行中).Resolved(已完成,又称Fulfilled)和Rejected(已失败).只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态.这也 一旦状态改变,就不会再变,任何时候都可以得到这个结果.Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected.只要这两种情况发生,状态就凝固了,不会再变…
1.概述 异步编程 App 开发中用得非常频繁,但异步请求后的操作却比较麻烦.Promise 就是解决这一问题的编程模型.其适用于 延迟(deferred) 计算和 异步(asynchronous) 计算.一个 Promise 对象代表着一个还未完成,但预期将来会完成的操作.它并非要替代 GCD 和 NSOperation,而是与它们一起合作. 2.历史 Promise 的出现已经很久了,这个术语首页在 C++ 中出现,之后被用在 E 语言中.2009年,提出 CommonJS 的 Promis…