const Promise = function(fn){
    let state = {
        pending: "pending",
        fulfilled: "fulfilled",
        rejected: "rejected"
    }
    let chain = {
        status: state.pending
    }
    let result;
    chain.then = function(fn){
        if( state.fulfilled === chain.status ){
            result = fn(result)
            if(typeof result === "object" && result.constructor === Promise) return result;
      }
        return chain
    }
    chain.catch = function(fn){
        if( state.rejected === chain.status ){
            result = fn(result)
            if(typeof result === "object" && result.constructor === Promise) return result;
        }
        return chain
    }
    this.then = chain.then
    this.catch = chain.catch

    function resolve(val){
        if(chain.status !== state.pending) return;
        chain.status = state.fulfilled
        result = val
    }
    function reject(val){
        if(chain.status !== state.pending) return;
        chain.status = state.rejected
        result = val
    }
    fn(resolve, reject)
}

简单的 Promise 实现 一的更多相关文章

  1. 一个简单的Promise 实现

    用了这么长时间的promise,也看了很多关于promise 的文章博客,对promise 算是些了解.但是要更深的理解promise,最好的办法还是自己实现一个. 我大概清楚promise 是对异步 ...

  2. 实现简单的promise

    只考虑成功时的调用,方便理解一下promise的原理promise的例子: 1. 接下来一步步实现一个简单的promise step1:promise 接受一个函数作为构造函数的参数,是立即执行的,并 ...

  3. 如何用原生JS实现一个简单的promise

    我又又又回来了,最近真是累的跟狗一样,急需一个大保健回复一下子精力 我现在是一边喝着红牛一边写着博客,好了好了,不扯了,回归整体好吧 先简单来说一下啥是promise吧 它是什么?Promise是一个 ...

  4. 简单版 Promise/A+,通过官方872个测试用例

    promise 标准 在实现 Promise 之前要清楚的是 JavaScript 中的 Promise 遵循了 Promises/A+ 规范,所以我们在编写 Promise 时也应当遵循这个规范,建 ...

  5. 聊一聊看似简单的Promise.prototype.then()方法

    Promise.prototype.then() Proise实例的then方法是定义在原型对象Promise.prototype上的,它的作用是为Promise实例添加状态改变时的回调函数. 该方法 ...

  6. 简单模拟 Promise

    class promise { constructor(fn) { this.data = null; this.err = null; this.isPromise = false; this.er ...

  7. [手写系列] 带你实现一个简单的Promise

    简介 学习之前 需要先对Promise有个基本了解哦,这里都默认大家都是比较熟悉Promise的 本次将带小伙伴们实现Promise的基本功能 Promise的基本骨架 Promise的then Pr ...

  8. 简单的 Promise 实现

    参考 http://www.tuicool.com/articles/RzQRV3 var PENDING = undefined, FULLFILLED = 1, REJECTED = 2; var ...

  9. 手写简单的promise

    function Promise(fn) { var that = this; this.status = "pedding"; this.value = undefined; / ...

随机推荐

  1. 历届试题 大臣的旅费 树形DP

    题目链接:大臣的旅费 思路:锦囊说用广搜,可惜这题没说数据范围,担心复杂度太高,我就直接用的树形DP--求树的最远路径. 以城市1为整棵树的根结点,d(i)表示以i为根结点的子树的最远路径,还有一个f ...

  2. HDU - 1067 Gap (bfs + hash) [kuangbin带你飞]专题二

    题意:    起初定28张卡牌的排列,把其中11,  21, 31, 41移动到第一列,然后就出现四个空白,每个空白可以用它的前面一个数的下一个数填充,例如43后面的空格可以用44填充,但是47后面即 ...

  3. (转载,但不知道谁原创)获取SPRING 代理对象的真实实例,可以反射私有方法,便于测试

    /** * 获取 目标对象 * @param proxy 代理对象 * @return * @throws Exception */ public static Object getTarget(Ob ...

  4. AnsibleAPI源码剖析(1)-Runner类的 初始化

    #ansible版本说明:ansible1.9.1 1.简单使用例子 # -*- coding=utf-8 -*- import ansible.runner #################### ...

  5. NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)

    R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题. 笔者认为还存在的问题有: 1.如何在R语言环境下,大规模语料提高运 ...

  6. Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextAware

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  7. 关于tween.js测试介绍

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>t ...

  8. Web原理

    在日常学代码的过程中,总会多多少少遇到点瓶颈.但是别人又听得懂,这是为什么? 我觉得,就是在原理上都不去思考,为什么这样写?为什么一定要这样写?那到底该怎么写?写完了是怎么运行的? 就以上几个问题,只 ...

  9. ASP.NET Core 2.0: 二. 开发环境

    macOS:Install Visual Studio for Mac 系统要求: macOS 10.12 Sierra 及更高版本 其他要求: 可能会要求安装xcode或android相关环境, 详 ...

  10. WKWebView 加载本地HTML显示不出网页问题,这点你注意了吗?-------完美显示

    1.首先,WKWebView的引入和创建,我这里就不做阐述,我要说的,就是解决别人不能给您解决的问题 2.WKWebView 加载本地HTML,也就是两三句代码  是吧?作为读者的您肯定也知道,也实现 ...