zoukankan      html  css  js  c++  java
  • 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的核心实现也就应该是这个了。









  • 相关阅读:
    win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
    JQUERY UI Datepicker Demo
    Official online document, install svn server in centOS
    JAVE not work in linux
    AMR 转mp3 失败
    XD, XR, DR 股票
    Linux 下MySql 重置密码
    Difinition Of Done
    Apache, Tomcat, JK Configuration Example
    Linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/formyjava/p/4166312.html
Copyright © 2011-2022 走看看