ES6 promise对象
解决异步问题
1. 回调函数的方式
1 function func(callback){ 2 setTimeout(()=>{ 3 callback("异步数据") 4 },1000) 5 } 6 func(function (res){ 7 console.log(res) 8 })
2. 通过Promise解决异步问题
这个是ES6新出的解决异步问题的语法,通过promise可以避免回调函数产生的回调地域的问题
-
怎么使用Promise
1 let pro = new Promise((reslove,reject)=>{ 2 // 异步操作放在这个里面,一旦创建promise对象,就会执行这里的代码 3 // 通过 reslove标识执行成功 reslove(参数). 这里reslove的参数, 4 // 通过reject标识失败, reject(参数) 5 }) 6 pro.then(res=>{ 7 // 这个res就是reslove的时候括号里写的数据}).catch(err=>{ 8 // 这个err就是reject的时候括号里的数据 9 })
-
promise的状态只会变化一次
-
pendding: 等待
-
fulfilled(resloved) : 成功
-
rejected: 失败
-
promise的链式调用 promise通过链式调用解决回调地域的问题
-
Promise的.then方法返回的还是一个Promise对象,这个Promise的状态是由上一个.then方法中函数的返回值的决定
-
pro.then(res=>{})
-
上一个.then返回了一个Promise对象。 这里得到的状态就和这个Promise对象一样
-
上一个.then返回了一个非Promise对象。可以直接在后续函数拿到这个数据
-
Catch() 方法 只接受一个参数,对操作异常后进行处理
-
pro.catch(err=>{})
-
promise两个API
-
Promise.all() 所有Promise都执行完了在进行一些操作
Promise.all([promise1,promise2,promise3]).then(results=>{
// 获取所有Promise的结果 console.log(results);
})
-
Promise.race() 有一个执行完了就进行一些操作
// 有任何一个Promise完成了就结束Promise.race([promise1,promise2,promise3]).then(res=>{
// 拿到的是第一执行完的结果 console.log(res);
})