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方法指定的回调函数。
下一篇: 数组的增删改查