一.利用promise处理异步问题
promise是什么?
1.promise是ES6引入的新语法
2.主要用于处理异步调用
3.原生ajax的异步调用如果需要按照一定顺序执行的话,很容易造成“回调地狱”,代码维护和代码可读性极低。利用promise可以很好地将这一问题解决,将嵌套调用改为线性调用。
4.promise是一个对象
2.promise实例
new Promise(
function(resolve,reject){
//..一段消耗时间的代码操作
resolve('success') //数据正常操作抛出
reject('error')//数据处理异常抛出
}
).then(
(res) => {//成功的回调}
(err) => {//失败的回调}
)
-promise的三种状态:
1.pending 初始状态
2.fulfilled 成功状态
3.rejected 失败状态
-当promise里的状态发生转变的时候,就会触发then()。
-需要注意的一点事promise的状态已经改变,则不会在发生改变。
-resolve 的作用是将正在处理中的状态,变为成功状态,并将结果作为参数传递出去。
-reject的作用是将正在处理中的状态,变为失败的状态,并将结果作为参数传递出去。
利用promise处理多种异步请求的例子如下:
new Promise(
function(resolve,reject){
//..一段消耗时间的代码操作
resolve('success') //数据正常操作抛出
reject('error')//数据处理异常抛出
}
)
.then(
(res) => {
//..一段消耗时间的代码操作
return res
})
.then( (res) =>{
//..一段消耗时间的代码操作
return res
}
.then( (res)=>{
//..一段消耗时间的代码操作
return res
})
}
这样就将“回调地狱”变为一段线性的操作,有利于代码可读性和维护性。
promise的其他用法:
promise.all([a1,a2,a3]) 用于多个promoise实例,接受一个数组作为参数当所有的异步请求完成,才会返回结果。
Promise.race() 类似于Promise.all() ,区别在于他只要有一个完成则就马上返回结果。