用途:
1、主要用于异步计算()
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
其实就是操作完之后会告诉我们这个事情结束了
基础
1.promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外)
2.并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据
3.代码风格,容易理解,便于维护
4.多个异步等待合并便于解决
5.可以进行链式操作
6.Promise对象的状态改变,只有两种可能:
从pending变为fulfilled
从pending变为rejected。
这两种情况只要发生,状态就凝固了,不会再变了。
使用
基础用法
new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
).then(
(res) => {console.log(res)}, // 成功
(err) => {console.log(err)} // 失败
)
分开写法
let pro = new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
)
pro.then(
(res) => {console.log(res)}, // 成功
(err) => {console.log(err)} // 失败
)
链式操作
let pom = new Promise(function(rsol,reject){
rsol('成功')
// reject('失败返回')
})
pom.then(
(e)=>{
console.log(e)
return '再次成功'
},
(e)=>{
console.log(e)
throw '再次失败'
}
).then(
(e)=>{
console.log(e)
},
(e)=>{
console.log(e)
}
)
这里可以无线连下去
拓展 async 和 await
async
async 其实就是把函数执行结果改变成一个promise对象,执行之后点then(),和promise用法一样,只是更简洁,
async function pom(){
throw '失败了'
}
pom().then(
(e)=>{
console.log(e)
},
(e)=>{
console.log(e)
}
)
await
官方表达是 await右边最好是promise对象,可以直接取得promise对象的值,直接省去了点then()的阶段,但是只能在async 函数里面,不然没办法用
async function pom(){
return '成功了'
}
async function pomxs(){
console.log(await pom())
}
pomxs()
网友评论