Promise简单实现
来源:互联网 发布:2017科幻电影推荐知乎 编辑:程序博客网 时间:2024/06/05 23:01
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>promise-polyfill</title></head><body> <script type="text/javascript"> //Promise-polyfill function Promise(fn) { var state = 'pending'; var doneList = []; this.then = function(done, fail) { switch(state) { case 'pending': doneList.push(done); return this; break; case 'fulfilled': done(); return this; break; case 'rejected': fail(); return this; break; } //保存成功回调,异步 doneList.push(done); //链式调用 return this; } function resolve(newValue) { state = 'fulfilled'; //异步结果传递 var value = newValue; //放到最后执行,确定donelist里不为空 setTimeout(function(){ var value = newValue; for (var i = 0; i < doneList.length; i++){ var temp = doneList[i](value); if(temp instanceof Promise){ var newP = temp; for(i++; i < doneList.length; i++){ newP.then(doneList[i],failList[i]); } }else{ value = temp; } } }, 0); // doneList.forEach(function(fulfill) { // value = fulfill(value); // }); } function reject(newValue) { state = "rejected"; setTimeout(function() { var value = newValue; var tempRe = failList[0](value); //如果reject里面传入了一个promise,那么执行完此次的fail之后,将剩余的done和fail传入新的promise中 if(tempRe instanceof Promise) { var newP = tempRe; for(i = 1;i < doneList.length; i++) { newP.then(doneList[i],failList[i]); } }else { //如果不是promise,执行完当前的fail之后,继续执行doneList value = tempRe; doneList.shift(); failList.shift(); resolve(value); } }, 0); } fn(resolve, reject); } var promise = new Promise(function(resolve) { // console.log('hehehe') resolve(); }); promise.then(function() { console.log('resolve') }); </script></body></html>
阅读全文
0 0
- Promise简单实现
- Promise 简单实现
- Promise简单实现
- JS Promise的简单实现
- 实现一个简单的Promise
- 自己实现一个简单的Promise
- 异步编程Promise的简单实现
- JavaScript简单实现Promise/A+规范
- [ JS 进阶 ] 异步编程 promise模式 的简单实现
- [ JS 进阶 ] 异步编程 promise模式 的简单实现
- [ JS 进阶 ] 异步编程 promise模式 的简单实现
- promise 的简单使用说明
- promise的简单使用
- chrome 原生promise 实现 promise.map
- 解析 Promise 原理,实现一个Promise
- 【入门】promise的实现
- Promise实现原理
- Promise实现的lazyman
- java学习知识积累-Mybatis中Mapper内置方法细解
- ov7725鹰眼
- Spring AOP浅谈及使用注解方法测试
- ZOJ1610 Count the Colors(线段树+思路)
- 高德,百度,Google地图定位偏移以及坐标系转换
- Promise简单实现
- colorful tree
- mysql开启远程访问权限
- shell 中 单引号 和 双引号
- android locationManager定位
- 常用网络服务及其对应端口号
- Spring MVC请求处理流程及源码分析
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- Unity3D优化