Promise实现原理

当我们用$.ajax()这个API的时候,是想使用Ajax去请求数据。并且在回调函数success里面去操作我们得到的数据。但是当我们有了Promise之后,我们就没有必要在$.ajax()要传入的对象中去写这个success属性了。我们可以直接$.ajax().then(fn1,fn2)。因为Jquery把Promise封装在了$.ajax()这个API上,他返回的是一个Promise对象,这个Promise对象上有一个方法then,它接受两个回调函数。并且这个then方法也是返回一个Promise对象(实现链式调用)。then的第一个参数,就是我们得到数据后需要去操作数据的那个函数 。
代码如下:

   $({url:'xxxx',action:"GET"}).then(function(通过Ajax得到的数据){
         console.log(通过Ajax得到的数据));
     },function(){})

这样一来 我们就可以通过then方法把从后台拿到的数据打印到控制台上。
同理,第二个参数也是一个回调函数,并且是Ajax的错误处理函数。

以上就是Jquery封装的Promise的基本使用。

但是ES6 支持了一个Promise语法,使得我们可以自己写一个Promise对象。
写法如下

function Ajax(){
  return new Promise(function(resolve,rejected){
      var request = new XMLHttpRequest();
      request.open('xxx/','GET');
      request.onstatechange = funcion(data){
         if(request.stateCode>200 && request.stateCode <400 ){
             console.log('我得到的数据是'+data);
             resolve(data);  //确保把data传给then()都第一个回调参数
          }
         if(request.stateCode >400){
            console,log('抛出一个错误');
            rejected();            
          }
       } 
})
}

可能在刚才我们使用then方法的时候你也许会问,为什么then方法就能把第一个参数作为成功回调,把第二个参数作为失败回调。Promise内部是如何判断到底是请求成功还是失败了呢。
答案就在这个resolve和reject。
当我们自己写API的时候,我们就可以控制让一个参数的调用位置出现在什么地方,如果我们让resolve方法在请求成功的时候被调用,那么我们写的第一个参数就是成功回调参数。反之亦然。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原理分析 场景分析 简易版promise 上述代码很简单,大致的逻辑是这样的: 调用then方法,将想要在Prom...
    209bd3bc6844阅读 9,078评论 1 5
  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 6,466评论 0 12
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 12,772评论 0 29
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 8,708评论 0 19
  • 阅读这本《停止盲目努力,你的人生需要再设计》的最初目的,是冲着封面的宣传语:“写给所有不满于现状,却不知如何改变的...
    源本kiki阅读 4,147评论 0 12

友情链接更多精彩内容