zoukankan      html  css  js  c++  java
  • es6中promise 使用总结

     es6中promise实现ajax的例子

    function getData(url){
            var pro = new Promise(function(resolve,reject){
                var xhr = null;
                try{
                    xhr = new XMLHttpRequest()
                }
                catch(e){
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                xhr.open("get",url);
                xhr.onreadystatechange=function (){
                    if(xhr.readyState===4){
                        if(xhr.status===200){
                            resolve(xhr.response);
                        }else{
                            reject(new Error(xhr.status));
                        }
                    }
                }
                xhr.send()
            })
            return pro;
        }
        getData("xxxx.url").then(function(data){
            console.log(data);
        },function(error){
            console.log(error);
        })

    readyState

           0:已建立对象但没有send

           1:已经send对象正在载入

       2:载入完成

       3:解析接收到数据

       4:解析完成,可以response

     状态 status

          200ok

          302:文件暂时性转移

          304:资源在上次请求后没有修改

      500:服务器内部问题

     

    Promise.all的使用

     

    Promise.all([
      getApplicationManage(params),
         msgListConfig(),
         emailListConfig(),
         wechatListConfig(),
         getModuleManage(params)
      ]).then(function(values) {
          _this.applicationData = values[0].model;
          _this.msgConfigOptions = values[1].model;
          _this.emailConfigOptions = values[2].model;
          _this.wechatConfigOptions = values[3].model;
          let resData = values[4].model;
      }).catch(error => {
           console.log('error');
      }).finally(() => {
           this.loading = false;
           console.log('finally');
     });

     

     手写简易promise

    promise对象状态改变只有两种可能,从pending改到fulfilled或者从pending改到rejected只要这两种情况发生,状态就不会再改变

     

       class myPromise {
            constructor(fn) {
              this.status = "pending"
              this.value = "";
              fn(this.resolve.bind(this),this.reject.bind(this))
            }
            resolve(val) {
              this.status = "fulfiled"
              this.value = val
            }
            reject(error) {
              this.status = "rejected"
              this.value = error
            }
            then(resolve, reject) {
              if (this.status == "fulfiled") {
                resolve(this.value)
              }
              if (this.status == "rejected") {
                reject(this.value)
              }
            }
          }

    //使用 //打印出123 const p
    = new myPromise((resolve, reject)=> { resolve("123") }) p.then((res)=>{ console.log(res) }, (error)=>{ console.log(error) } )

     

  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/zhaozhenzhen/p/12407966.html
Copyright © 2011-2022 走看看