欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6重点

程序员文章站 2024-02-21 09:49:16
...

一、箭头函数
1.用了箭头函数,this就不是指向window,而是父级(指向是可变的),如果箭头函数被非箭头函数包裹,则this指向离他最近的非箭头函数的this,否则指向window;
2.不能够使用arguments对象
3.不能用作构造函数,这就是说不能够使用new命令,否则会抛出一个错误;

二、promise
概念: 用同步的方式,来写异步的内容。

  • Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
  • resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
  • reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

写法:var promise=new Promise() (就像数组一样,需要数组时就定义一个变量然后new一个数组)

var promise=new Promise(
       function(resolved,rejecked){
           //resolve------- 成功
           //rejeck ------- 失败
})
promise.then(function(){},function(){})//第一个函数对应resolve 第二个对应reject

案例:使用promise封装一个ajax(ajax案例文件必须放在Appserv的www文件下,并且将网页域名改为localhost格式才异步请求)

//为了对比,将原生ajax和promise对象两种都写上
//原生ajax:
var http=new XMLHttpRequest();
http.open('get','data/promiseajax.txt');
http.send();
http.onreadystateschange=function(){
    if(http.readyState===4&&http.status===200){
               alert(http.responseText)
    }
}


//promise   这里使用jquery
var pro=new Promise(function(resolve,reject){
      $.ajax({
            url:'data/promiseajax.txt',
            dataType:'json',
            success(arr){
                 resolve(arr);
            },
            error(){
                 reject()
            }
    })
})
pro.then(function(arr){
     alert('success'+arr)
},function(){
     alert('error')
})

//这里用原生promise封装原生Ajax
function proajax(url){
 var promise=new Promise(function(resolve,reject){
     var http=new XMLHttpRequest();
        http.open("GET",url);
        http.onreadystatechange=function(){
             if(this.readyState==4&&this.status==200){
                        resolve(this.response)
                 }
          };
          http.send();
    })
    return promise;
}
proajax("data/promiseajax.txt").then(function(arr){
 alert("success"+arr)
},function(err){
alert("error"+err)
})

别的属性方法:

  • promise.all()方法:const p = Promise.all([p1, p2, p3]);
  • Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。
  • all中任意一个请求失败则返回失败,第一个请求失败的实例的返回值,返回给promise.all后的回调函数
var pro1=new Promise(function(resolve,reject){
      $.ajax({
            url:'data/promiseajax.txt',
            dataType:'json',
            success(arr){
                 resolve(arr);
            },
            error(){
                 reject()
            }
    })
});
var pro2=new Promise(function(resolve,reject){
      $.ajax({
            url:'data/promiseajax.txt',
            dataType:'json',
            success(arr){
                 resolve(arr);
            },
            error(){
                 reject()
            }
    })
})
//要请求两个 则可以使用all方法
Promise.(all([pro1,pro2]).then(function(){
      let [res1,res2]=arr;
      console.log(res1,res2)
       alert("全部成功")
},function(){
     alert("某一个失败了,不知道哪一个")
})
  • catch

Promise.prototype.catch方法是.then(null, rejection)或.then(undefined, rejection)

proajax("data/promiseajax.txt").then(function(){
//....一系列操作
}).catch(function(err){
console.log("发生错误"+err)
})
  • Promise.race()
  • 如果指定时间内没有获得结果,就将 Promise 的状态变为reject,否则变为resolve。
const p = Promise.race([
  fetch('/resource-that-may-take-a-while'),
  new Promise(function (resolve, reject) {
    setTimeout(() => reject(new Error('request timeout')), 5000)
  })
]);

p
.then(console.log)
.catch(console.error);

如果5秒内没有获得返回结果,接返回reject,从而触发catch方法指定的回调函数。

相关标签: es6