摘抄 Promise原理
2024-09-08 15:51:29
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);
}
最新文章
- CentOS7下安装chrome浏览器
- 【转】Mecanim Animator使用详解
- Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda
- 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏
- yaf框架流程二
- 解决IE6中ajax ‘aborted’错误请求中断
- pogo pin连接器塑胶部件的缺陷及产生原因分析
- C语言中的宏
- 关于磁盘冗余阵列、热备、群集、负载均衡、云计算、F5、Nginx等的概念和基本原理
- Elastic FileBeat 快速入门
- 关于主机用户名显示为";-bash-4.1$";
- Python Web-第四周-Programs that Surf the Web(Using Python to Access Web Data)
- java多线程、线程池及Spring配置线程池详解
- 将eclipse dynamic web project部署到指定的tomcat软件下的webapps文件夹中
- MySQL服务安全加固
- 6.4 操作契约 Operation Contracts
- 23_pikle/shevel/json
- RocketMQ多Master多Slave模式部署
- bzoj1864 三色二叉树
- 在windows的IDEA运行Presto
热门文章
- 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
- Android近场通信---NFC基础(一)(转)
- Poj2299 Ultra-QuickSort(另附本质不同逆序对)
- C# 基础之类与结构体的区别
- [coci2015-2016 coii] torrent【树形dp 二分】
- PHP面向对象static关键字
- 从navicat for mysql导出数据库语句时应该加上的两条语句
- APACHE服务器httpd.exe进程占用cpu100%的解决方法
- 报错:Error: ENOENT, no such file or directory 'c:\Users\Administrator\WebstormProjects\blogtest\views\footer.ejs'
- Java编程基础-面向对象(上)