一、params
首先params是用来解决异步的队列化操作
然后,promise参数是个函数,函数的参数有2个,resolve 返回成功的信息,reject返回失败的信息
new Promise((resolve,reject)=>{
// 开始请求数据
// 当数据回来之后调用 resolve(res)
// 当请求失败之后调用 reject(err)
})
例如使用promise请求数据
var aaa = new Promise((resolve, reject) => {
axios.get(url).then(res => {
resolve(res.data)
}).catch(err => {
reject('网络异常')
})
})
params有何作用
1、避免回调地狱
axios.get("http://www.baidu.com").then(res=>{
return new Promise((resvole,reject)=>{
let goodsid = res.goodsId
axios.get('http://google.com?goodsid=A001').then(res=>{
resolve(res)
}).catch(err=>{
reject(err)
})
})
}).then(res=>{
res.xxx
return new Promise((resolve,reject)=>{
axios.get("xxxx?aa=xxx",).then(res=>{
resvole(res)
}).catch(err=>{
reject(res)
})
})
}).then()
获取错误信息时可使用.catch
或者在.then中加入第二个参数获取错误
例如
new Promise((resolve,reject)=>{
if(ok){
resolve(res)
}else{
reject(err)
}
}).then(res=>{
},err=>{
})
2、promise可以支持多个并发的请求,获取并发请求中的数据
3、这个promise可以解决异步的问题(把异步变同步),本身不能说promise是异步的
4、axios.get axios.post得到的也是一个promise对象
Promise.all([p1, p2, p3]).then()
Promise.all可处理多个异步的处理
Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
需要特别注意的是,Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚。这带来了一个绝大的好处:在前端开发请求数据的过程中,偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题。
二、async/awiat
async
async 它作为一个关键字放到函数前面 用于表示函数是一个异步函数 ,
异步函数也就意味着该函数的执行不会阻塞后面代码的执行。
函数返回的是一个 对象,如果要获取到promise 返回值,我们应该用.then 方法
awiat
是等待的意思 后面更多的是放一个返回promise 对象的表达式,
表示等一下,代码就暂停到这里,不再向下执行了,promise对象执行完毕,然后拿到promise的值并进行返回,返回值拿到之后,它继续向下执行。
如果在可能出现错误的地方执行async/awiat后获取错误信息的话,就要用到try(尝试)-catch(捕获)