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

最新文章

  1. CentOS7下安装chrome浏览器
  2. 【转】Mecanim Animator使用详解
  3. Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda
  4. 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏
  5. yaf框架流程二
  6. 解决IE6中ajax ‘aborted’错误请求中断
  7. pogo pin连接器塑胶部件的缺陷及产生原因分析
  8. C语言中的宏
  9. 关于磁盘冗余阵列、热备、群集、负载均衡、云计算、F5、Nginx等的概念和基本原理
  10. Elastic FileBeat 快速入门
  11. 关于主机用户名显示为"-bash-4.1$"
  12. Python Web-第四周-Programs that Surf the Web(Using Python to Access Web Data)
  13. java多线程、线程池及Spring配置线程池详解
  14. 将eclipse dynamic web project部署到指定的tomcat软件下的webapps文件夹中
  15. MySQL服务安全加固
  16. 6.4 操作契约 Operation Contracts
  17. 23_pikle/shevel/json
  18. RocketMQ多Master多Slave模式部署
  19. bzoj1864 三色二叉树
  20. 在windows的IDEA运行Presto

热门文章

  1. 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
  2. Android近场通信---NFC基础(一)(转)
  3. Poj2299 Ultra-QuickSort(另附本质不同逆序对)
  4. C# 基础之类与结构体的区别
  5. [coci2015-2016 coii] torrent【树形dp 二分】
  6. PHP面向对象static关键字
  7. 从navicat for mysql导出数据库语句时应该加上的两条语句
  8. APACHE服务器httpd.exe进程占用cpu100%的解决方法
  9. 报错:Error: ENOENT, no such file or directory 'c:\Users\Administrator\WebstormProjects\blogtest\views\footer.ejs'
  10. Java编程基础-面向对象(上)