Promise下的方法
模拟请求接口
网络请求状态码
- 100-199 用于指定客户端应相应的某些动作
- 200-299 用于表示请求成功
- 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息
- 400-499 用于指出客户端的错误
- 500-599 用于支持服务器错误
new Promise((resolve,reject)=>{
// 模拟请求接口,拿到数据
setTimeout(()=>{
let data ={
state : "200",
isState : "ok",
data : {
code : 1
}
}
resolve(data);
},1000)
}).then((data)=>{
return data.data
}).then((data)=>{
console.log(data)
});
Promise.catch
捕获前一个promise抛出的错误
new Promise((resolve,reject)=>{
// resolve();
reject(12)
}).then(()=>{
console.log(1)
}).then(()=>{
console.log(2)
}).then(()=>{
console.log(3)
}).catch((err)=>{
console.log("请求错误"+ err)
})
Promise.all
将多个Promise实例,包装成一个新的Promise实例
当所有Promise都成功的时候,整个 Promise.all 才成功
必须以数组的形式传入多个Promise对象
let p1 = new Promise((resolve)=>{
setTimeout(()=>{
console.log(1)
resolve()
},1000)
})
let p2 = new Promise((resolve)=>{
setTimeout(()=>{
console.log(2)
resolve()
},2000)
})
Promise.all([p1,p2]).then(()=>{
console.log(4)
})
Promise.race
与 Promise.all 方法类似将多个Promise包装成一个新的Promise实例
但是 只要 其中有一项的状态发生改变,新的实例的状态就会随着改变
// 使用量较小
Promise.race([p1,p2]).then(()=>{
console.log(5)
})
async函数
异步执行的特点:效率高 ,但代码可读性差
async 是目前为止 异步写法终极版
只要函数名之前加上async关键字,就表明该函数内部有异步操作。
该异步操作应该返回一个Promise对象,前面用await关键字注明。
当函数执行的时候,一旦遇到await就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句
async function fn() {
let n1 = await new Promise((resolve) => {
setTimeout(() => {
console.log(1);
resolve();
}, 1000)
});
let n2 = await new Promise((resolve) => {
setTimeout(() => {
console.log(2);
resolve();
}, 1000)
});
let n3 = await new Promise((resolve) => {
setTimeout(() => {
console.log(3);
resolve();
}, 1000)
});
}
fn()
- 处理错误数据
async function fn() {
try {
let n1 = await new Promise((resolve,reject) => {
setTimeout(() => {
console.log(1);
reject(12);
}, 1000)
}).then(()=>{
console.log(2)
})
// 只要 其中有一项的状态发生改变,新的实例的状态就会随着改变
} catch (err) {// err 会接收 reject() 返回的数据
console.log(err)
}
}
fn()