摘抄 Promise原理

1、简单的promise:

        //极简promise雏形
        function Promise(fn){
            var value = null;
            callbacks = [];//callback为数组,因为可以同时有很多个回调
            this.then = function(onFulfilled){
                callbacks.push(onFulfilled);
            }
            function resolve(value){
                callbacks.forEach(function(callback){
                    callback(value);
                });
            }
            fn(resolve);
        }

上面:

1、调用then方法,将想要在Promise异步操作成功时执行的回调放入callbacks队列,其实也就是注册回调函数。

2、创建Promise实例时传入的函数会被赋予一个函数类型的参数,即resolve,它接收一个参数value,代表异步操作返回的结果,当一步操作执行成功后,用户会调用resolve方法,这时候其实真正执行的操作是将callbacks队列的回调一一执行。

        //链式
        this.then=function(onFulfilled){
            callbacks.push(onFulfilled);
            return this;
        }
        //改造resolve函数保证异步执行
        function resolve(value){
            setTimeout(function(){
                callbacks.forEach(function (callback){
                    callback(value);
                },0);
            })
        }
        //状态 pending fulfilled
        function Promise(fn){
            var state ="pending";
            value = null;
            callbacks=[];

            this.then = function(onFulfilled){
                if(state === ‘pending‘){
                    callbacks.push(onFulfilled);
                    return this;
                }
            };
            function resolve(newValue){
                value = newValue;
                state = ‘fulfilled‘;
                setTimeout(function(){
                    callbacks.forEach(function(callback){
                        callback(value);
                    });
                },0);
            }
            fn(resolve);
        }
时间: 2024-10-13 01:43:58

摘抄 Promise原理的相关文章

Promise 原理

剖析 Promise 之基础篇 从JavaScript的事件循环到 理解 Promise 的工作原理 Promise原理 Promise的实现原理 Promise原理解析 深入 Promise(一)--Promise 实现详解 JS Promise的实现原理 深入了解promise的原理 原文地址:https://www.cnblogs.com/yancongyang/p/8949910.html

这一次,彻底弄懂 Promise 原理

Promise 必须为以下三种状态之一:等待态(Pending).执行态(Fulfilled)和拒绝态(Rejected).一旦Promise 被 resolve 或 reject,不能再迁移至其他任何状态(即状态 immutable). 基本过程: 初始化 Promise 状态(pending)执行 then(..) 注册回调处理数组(then 方法可被同一个 promise 调用多次)立即执行 Promise 中传入的 fn 函数,将Promise 内部 resolve.reject 函数作

25.Promise原理及实现

上一篇文章 24.Promises/A+ 规范 介绍了Promises/A+ 规范,我们来手动实现一个符合 Promises/A+ 规范的自己的Promise. 根据规范,Promise 共有三种状态 pending,fulfilled,rejected,我们使用 state 来表示 promise 当前的状态,使用 value 来表示当前值或原因.当然还有最重要的 then 方法.同时我们还需要一些辅助函数,比如 isFunction. 1234567891011121314151617181

Promise原理讲解 async+await应用(异步回调解决方案)

1.异步编程 1.1.回调函数 1.2 发布订阅 1.3 观察者模式 1.4 Promise 2.promise用法与原理 2.1 Promise.prototype.then() 2.2 Promise.prototype.catch() 2.3 Promise.all 2.4 Promise.race 2.5 Promise.resolve 2.6 Promise.reject 2.7 promise的一些扩展库 2.8 应用 async + await = generator + co 3

Promise 原理探究及其简单实现

可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大家都知道,度娘告诉我,以同步方式书写异步,解决回调地狱... 状态机 早闻Promise的大名,简单介绍,根据状态改变来执行相应处理函数.Promise的状态极其简单,只有 “pending”, “resolved”, “rejected”三种状态然后就是如何实现的问题,最关键的当然是监听到状态的更

Promise实现原理

这两天在熟悉 kissy框架的时候,看到了 Promise 模块. Promise 对于一个Jser并不陌生, Promise 类似于一个事务管理器,它的作用就是将各种内嵌回调的事务用流水形式表达.利用 Promise 可以让异步编程更符合人的直觉,让代码逻辑更加清晰,把开发人员从回调地狱中释放出来.这么“高大上”的东西,以前写 nodejs 代码的时候只是简单的用用,还没有理解其基本的实现原理,罪过!个人认为,理解编程思想最好的途径就是阅读一份简易的实现源码.很幸运,网上有不少 Promise

全面理解Javascript中Promise

全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非常有趣的Promise Promise概念 2015 年 6 月,ECMAScript 6 的正式版 终于发布了. ECMAScript 是 JavaScript 语言的国际标准,javascript 是 ECMAScript 的实现.ES6 的目标,是使得 JavaScript 语言可以用来编写大

细嗅Promise

读完这篇文章,预计会消耗你 40 分钟的时间. Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来.需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是页面异步操作指数般增长,如果不能恰当的控制代码逻辑,我们就会陷入无穷的回调地狱中. ECMAScript 6 已经将异步操作纳入了规范,现代浏览器也内置了 Promise 对象供我们进行异步编程,那么此刻,还在等啥?赶紧学习学习 Promise 的内部原理吧! 第一章 了解 Promise 一.场景

JavaScript进阶之路——认识和使用Promise,重构你的Js代码

一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半年的单身生活.大家一起加油~~ 一直以来,JavaScript处理异步都是以callback的方式,在前端开发领域callback机制几乎深入人心.在设计API的时候,不管是浏览器厂商还是SDK开发商亦或是各种类库的作者,基本上都已经遵循着callback的套路.近几年随着JavaScript开发模式的逐渐成