function mypromise(func){ this.statue = "pending"; this.data = null; this.resolveCallback = []; this.rejectCallback = []; this._final = null; var self = this; var resolve = function(data){ if (data instanceof mypromise) { data.then(resolve,rejec…
首先来说下同步异步与阻塞非阻塞的概念,同步异步与阻塞非阻塞并没有关系.同步异步主要是事情做完以后,如何进行处理.或者说关注的是一种消息通信机制. 同步的情况下,是由处理消息者自己去等待消息是否被触发: 而异步的情况下是由触发机制来通知处理消息者 举例: 所以同步异步可以说是对被请求方来说的,被请求者使用什么方式来告知处理结果 思考,思考.......,好了,有答案了,当场告诉你 -------- 同步 这个问题需要一点时间,你先做点别的,等我想好了,去找你. --------异步 阻塞非阻塞,主…
示例 // Promise.resolve() Promise.resolve(1).then((data) => { console.log(data) // 1 }) // Promise.reject() Promise.reject(2).catch((data) => { console.log(data) // 2 }) // Promise.all() // 多个Promise都成功后获取结果,调用成功回调,如果有一个promise失败了,all返回的promise对象也会失败,…
关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Promise是一个函数,这个函数上有在项目中常用的静态方法:all, race, reject,resolve等,原…
Promise是ES6中用来结局回调地狱的问题的但是并不能帮我们减少代码量 Promise是一个构造函数 new Promise() 得到一个Promise一个实例 在Promise上有两个函数分别是resolve(成功之后的回调函数)和reject(失败之后的回调函数) 在Promise构造函数的prototype属性上,有一个.then()方法,也就是只要是Promise构造函数创建的实例,都可以访问到.then()方法 如果Promise表示一个异步操作,每当我们new一个Promise的…
Promise解决的问题相信每个前端都遇到过这样一个问题,当一个异步任务的执行需要依赖另一个异步任务的结果时,我们一般会将两个异步任务嵌套起来,这种情况发生一两次还可以忍,但是发生很多次之后,就形成了所谓的回调地狱,代码层层嵌套,环环相扣,很明显,逻辑稍微复杂一些,这样的程序就会变得难以维护.就比如我们昨天的那个回调地狱的例子: function funA(callback) { console.log("A"); setTimeout(() = > { callback() }…
什么是Promise? Promise是一个构造函数,其原型上有 then.catch方法,还有reslove,reject等静态方法.通过创建Promise实例,可以调用Promise.prototype上的then.catch方法. Promise的作用 MDN对Promise的描述: Promise能够将异步操作最终成功返回值或者失败原因和相应的处理程序关联起来. 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 Promise,以便在未来某个时候把…
Promise的概念在ES6标准推出来之前已经深入人心,很多框架和第三方库都有类似的实现.但在深入理解ES6的Promise对象的时候,受之前经验的影响,很多概念给人似是而非的感觉,其中有一个特别明显的地方就是ES6中对Promise对象状态的定义. Promise的状态 Promise对象有三个状态:pending,fulfilled,rejected,MDN文档上对Promise对象状态变化过程用一幅图描述: 图中有几个小细节: 图中的fulfill和reject只是表示指向不同结果,而不是…
在win7环境下使用Devexpress中的SpinEdit控件,切换成中文[简/繁]输入法输入数字键时有不少输入法会重复产生数字如输入1会变成11,输入123会变成112233.使用SpinEdit控件的解决办法是:可将SpinEdit控件的ImeMode属性设定为Disable值,这样在控件获得焦点时将禁用输入法.页面上其他可输入中文的控件则将ImeMode属性设定为On. 但是当使用Devexpress中的GridControl进行编辑处理时会发现无论是GridControl,GridVi…
以EditText为例 1.改变焦点状态 password.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, String.valueOf(hasFocus),1).show…