Promise 简单实现
来源:互联网 发布:软件测试团队管理 编辑:程序博客网 时间:2024/05/12 14:18
/** * Created by wikid on 3/6/17. */;(function (f) { /** * 模块 引入方式 */ if (typeof exports === 'object') module.exports = f(); else if (typeof define === 'function' && define.amd) define(f); else if (typeof window !== undefined) window.Promise = f();})(function () { function Promise(fn) { /* value: resolve 的结果值(主要要来传递) state: promise 的状态 1. pending 等待中 2. fulfilled 已完成 3. rejected 失败 deferred: resolve 的回调栈 */ var value = null, state = 'pending', deferreds = []; /** * 为了兼容 promise 的串行,所以同一 then 方法同一返回 Promise 类型的实例 * @param fulfilledCall * @param rejectedCall * @returns {Promise} */ this.then = function (fulfilledCall, rejectedCall) { /** * 每一次调用 then 方法时,都会创建一个 bridge promise */ return new Promise(function (resolve) { handle({ fulfilledCall: fulfilledCall || null, rejectedCall: rejectedCall || null, resolve: resolve, reject: reject }) }); }; function handle(deferred) { if (state === 'pending') { deferreds.push(deferred); return; } var cb = state === 'fulfilled' ? deferred.fulfilledCall : deferred.rejectedCall, ret; // 兼容异常处理 if (cb === null) { cb = state === 'fulfilled' ? deferred.resolve : deferred.reject; cb(value); return } try { ret = cb(value); deferred.resolve(ret); } catch (e) { deferred.resolve(e); } } function resolve(newValue) { // if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { var then = newValue.then; if (typeof then === 'function') { then.call(newValue, resolve, reject); return; } } state = 'fulfilled'; value = newValue; finale(); } function reject(reason) { state = 'rejected'; value = reason; finale(); } function finale() { /** * 异步执行,主要是兼容,创建 promise 实例时,fn 内直接将 promise 的状态置为 fulfilled, * 而 后面的 then 方法还未执行,从而导致 deferreds 为 空数组 */ setTimeout(function () { deferreds.forEach(function (deferred, i) { deferred(value); }); }, 0) } fn(resolve); } return Promise;});
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 7之多线程第11篇
- C++学习记录6--srand(time(NULL)产生随机数
- Lecture 6
- iOS UICollectionView无限轮播
- Promise 简单实现
- GBDT(MART) 迭代决策树入门教程 | 简介
- mysql数据类型对应的java数据类型
- Scr888 Online Casino Beat the Bank Slots
- Nginx rewrite(重读)
- 快速排序--自行实现+qsort+sort
- mysql 查找字符串位置 instr()与LOCATE()字符串查找函数
- 如何在多web服务器共享SESSION数据
- JavaScript 对象和面向对象概述(自定义对象)