简单的 Promise 实现 一】的更多相关文章

用了这么长时间的promise,也看了很多关于promise 的文章博客,对promise 算是些了解.但是要更深的理解promise,最好的办法还是自己实现一个. 我大概清楚promise 是对异步概念的包装,当你拿到一个promise 对象,你并不是拿到你想要的值,而只是这个值的一个“承诺”.这个承诺可能被实现,从而你可以拿到最终想要的值,但也可能被拒绝,然后得到原因.关于promise 对编程风格的改善可以网上有很多文章可以参考,比如这篇. var promise = new Promis…
只考虑成功时的调用,方便理解一下promise的原理promise的例子: 1. 接下来一步步实现一个简单的promise step1:promise 接受一个函数作为构造函数的参数,是立即执行的,并且返回个resolve函数作为该函数的回调 function CPromise(fun){ function resolve(){ } fun(resolve); } step2: promise的then方法接受一个函数作为参数,并且该函数的参数值,来自于resolve方法中传入的参数,说明res…
我又又又回来了,最近真是累的跟狗一样,急需一个大保健回复一下子精力 我现在是一边喝着红牛一边写着博客,好了好了,不扯了,回归整体好吧 先简单来说一下啥是promise吧 它是什么?Promise是一个方案,用来解决多层回调嵌套的解决方案.它现在是ES6的原生对象.    干嘛用的?可以把一个多层嵌套的同步.异步都有回调的方法,给拉直为一串.then()组成的调用链. 解决啥问题?多层嵌套的回调方法中,如果同时存在同步.异步的方法,那么实际执行顺序会混乱.不好调试不好维护 现在我们再来说一说自己写…
promise 标准 在实现 Promise 之前要清楚的是 JavaScript 中的 Promise 遵循了 Promises/A+ 规范,所以我们在编写 Promise 时也应当遵循这个规范,建议认真.仔细读几遍这个规范.最好是理解事件循环,这样对于理解js中的异步是怎么回事非常重要. https://promisesaplus.com/ 基本使用 new Promise( function(resolve, reject) {...} /* executor */ ); new Prom…
Promise.prototype.then() Proise实例的then方法是定义在原型对象Promise.prototype上的,它的作用是为Promise实例添加状态改变时的回调函数. 该方法可以接收两个回调函数作为参数,其中第二个回调函数是可选的.第一个回调函数是 Promise 对象的状态变为 Resolved 时调用,第二个回调函数是 Promise 对象的状态变为 Rejected 时调用. 下面从以下几点进行说明: then 方法返回的是一个Promise实例,但是需要注意的是…
class promise { constructor(fn) { this.data = null; this.err = null; this.isPromise = false; this.errFn = null; this.queue = []; this.run = this.run.bind(this); this.error = this.error.bind(this); this.then = this.then.bind(this); this.catch = this.c…
简介 学习之前 需要先对Promise有个基本了解哦,这里都默认大家都是比较熟悉Promise的 本次将带小伙伴们实现Promise的基本功能 Promise的基本骨架 Promise的then Promise.then的多次调用 then链式调用 catch的实现 finally的实现 01-搭建基本骨架 const PROMISE_STATUS_PENDING = "PROMISE_STATUS_PENDING"; const PROMISE_STATUS_FULFILLED =…
参考 http://www.tuicool.com/articles/RzQRV3 var PENDING = undefined, FULLFILLED = 1, REJECTED = 2; var Promise = function(resolver) { var promise = this; this.value; this.reason; this.status = PENDING; this.resolver; this.rejecter; var resolve = functi…
const Promise = function(fn){ let state = { pending: "pending", fulfilled: "fulfilled", rejected: "rejected" } let chain = { status: state.pending } let result; chain.then = function(fn){ if( state.fulfilled === chain.status…
function Promise(fn) { var that = this; this.status = "pedding"; this.value = undefined; // 成功返回值 this.reason = undefined; // 失败返回值 this.onFulfilledArr = []; // 保存成功回调函数 this.onRejectedArr = []; // 保存失败的回调函数 // 成功 function resolve(value) { if (t…