• Promise API


    Promise API
        刚刚接触promise这个东西,网上看了很多博客,大部分是讲怎么用Promise,丝毫没提怎么实现Promise。 我不甘
    心,可是真去看JQuery或者AngularJs中Promise的源码又觉得云里雾里。于是就想自己先试试能不能实习Promise的API,
    然后再看源码深入学习。 (因为我觉得别人就算再怎么聪明,也不可能跳出Javascript的框架,我自己的实现无论如何
    都应该可以为我学习Promise提供一定的基础。)
        通过一些博客,我也大体知道Promise的使用效果,觉得它有点类似Java中的观察者模式。Promise API中通过then
    方法注册观察者,通过resolve或者reject方法通知观察者。有了这么个想法,实现Promise就简单了
        首先定义一个类:
        function Derfer(){

        }
        这个类(或者说方法)必须返回一个包含resolve,reject,then方法的对象,于是改造类如下:
        function Derfer(){
        
            return {
                resolve:function(){},
                reject:function(){},
                then:function(success,error){
                
                }
            };
        }
        现在要让then注册的观察者success(先称为成功观察者)和error(先成为失败观察者)能够分别在resolve和reject
    方法中执行,那么最简单的方式就是通过全局变量,如下:
        function Derfer(){
            var obj={
                success:function(){},
                error:function(){}
                };
            return {
                resolve:function(){
                    obj.success();
                },
                reject:function(){
                    obj.error();
                },
                then:function(success,error){
                    obj.success=success;
                    obj.error=error;
                }
            };
        }
    于是Defer 类就完成了。 现在用这个类试试能不能达到promise的效果。

        var d=new Derfer();
        /*这个get方法的实现可以放在某个库里面*/
        function get(url){
            $.ajax({
                url:url,
                success:function(){
                    d.resolve();
                },
                error:function(){
                    d.reject();
                }
            });
            return d;
        }
        /*对使用者来说只要调用下面的方法就行了*/
        get("http://xxx")
        .then(function(){
            alert('this is success');
        },function(){
            alert('this is error');
        });

    当然实际编程中可能还要考虑更多的东西,不过我觉得Promise的核心实现也就应该是这个了。









  • 相关阅读:
    DBHelper类
    户籍不在本市并已申请基本养老保险或基本医疗保险关系转移手续销户提取业务办理指南(试行)
    Android 打开/播放电脑的音频/视频文件
    (技术贴)如何鉴定绿茶婊
    Swift初探(一)
    关于android移动终端IM的一些问题
    C++中对象、引用、指针
    TextView
    新API
    开发者必备的6款源码搜索引擎
  • 原文地址:https://www.cnblogs.com/formyjava/p/4166312.html
Copyright © 2020-2023  润新知