博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
摘抄 Promise原理
阅读量:5094 次
发布时间:2019-06-13

本文共 1691 字,大约阅读时间需要 5 分钟。

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);        }

 

转载于:https://www.cnblogs.com/lantuoxie/p/6947427.html

你可能感兴趣的文章
【Python】:拓展Queue实现有序不重复队列
查看>>
ehcache讲解及实例
查看>>
ajax java base64 图片储存
查看>>
django1.10.3下admin后台管理老是显示object
查看>>
推荐一个程序员阅读文章资料时的辅助神器
查看>>
http://www.jb51.net/article/51934.htm
查看>>
linux查看防火墙状态及开启关闭命令
查看>>
Java集合——TreeMap源码详解
查看>>
2015,鬼王Xun和GGL比赛,带给我们无尽的欢乐
查看>>
111... 南邮NOJ 1079
查看>>
别把SEO当苦力活,做优化要讲究策略
查看>>
Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
查看>>
关于时间
查看>>
面向对象 阶段性总结
查看>>
[Android] 开发第十天
查看>>
[html]window.open 使用示例
查看>>
.NET下使用socket.io随笔记录
查看>>
操作~拷贝clone()
查看>>
通过this()调用有参构造方法
查看>>
【RN6752】模拟高清AHD芯片或成为车机新标配
查看>>