关于javascript:Promise的理解和使用二

45次阅读

共计 2374 个字符,预计需要花费 6 分钟才能阅读完成。

一、Promise 的罕用 API
promise 的这些办法执行实现都会返回一个新的 promise,promise 的状态由执行的后果决定。

(1) new Promise()中的 excutor 函数

new Promise((resolve, reject)=>{
  // 依据解决的内容来返回胜利或者失败
  resolve(1)
})

excutor 函数是在 JS 主线程中的,一旦申明就会立刻执行

(2) Promise.prototype.then
then 办法是提供给 Promise 实例对象应用的办法,通过 then 能够获取 promise 的执行后果,这个办法里的执行须要等到主线程执行实现之后才执行,属于微工作。
onResolved 示意胜利的执行办法,通常写成 value => {}
onRejected 示意失败的执行办法,通常写成 reason => {}

const promise = new Promise((resolve, reject)=>{setTimeout(()=>{resolve(1)
     }, 1000)
})

promise.then(value => { console.log('胜利', value)},
    reason => {console.log('失败', reason)} 
)
// 执行后果 --- 胜利 1

(3) Promise.prototype.catch
catch 是提供给 Promise 实例对象应用的办法,通过 catch 来解决失败,解决失败的办法有两种,一种是通过下面的 then 办法,对每次的 promise 执行定义解决胜利和解决失败的函数,第二种就是间接应用 catch 办法,能够进行一个谬误穿透,不须要每次在 then 里定义失败的解决办法

const promise = new Promise((resolve, reject)=>{setTimeout(()=>{reject(0)
     }, 1000)
})

promise.then(value => { console.log('胜利', value)}
).catch(error => { console.log('error', error)}
)
// 执行后果 --- error 0

(4) Promise.resolve
定义在构造函数 Promise 本身的办法,不须要创立实例对象,可间接返回执行胜利

Promise.resolve(2)
.then(value=>{console.log('胜利', value)
})
// 执行后果 --- 胜利 2

(5)Promise.reject
定义在构造函数 Promise 本身的办法,不须要创立实例对象,可间接返回执行胜利

Promise.reject(-1)
.then(value=>{console.log('胜利', value)
})
.catch(error=>{console.log('error', error)
})
// 执行后果 --- error -1

(6) Promise.all
定义在构造函数 Promise 本身的办法,接管一个由 promise 实例组成的数组,当所有的 promise 都执行实现且胜利才会返回胜利(result 为胜利数据的数组),只有有一个失败就会返回失败。

const p1 = new Promise((resolve, reject)=>{setTimeout(()=>{resolve(1)
     }, 2000)
})

const p2 = new Promise((resolve, reject)=>{setTimeout(()=>{resolve(2)
     },1000)
})

Promise.all([p1,p2])
.then(value=>{console.log('value', value)
 })

// 2s 后输入,执行后果 --- value [1, 2]

(7) Promise.race
定义在构造函数 Promise 本身的办法,和 all 一样,接管由 promise 实例组成的数组,区别在于,race 办法是进行 promise 实例执行办法速度的比拟,返回最快实现的异步操作

const p1 = new Promise((resolve, reject)=>{setTimeout(()=>{resolve(1)
     }, 2000)
})
const p2 = new Promise((resolve, reject)=>{setTimeout(()=>{resolve(2)
     },1000)
})
Promise.race([p1,p2])
.then(value=>{console.log('value', value)
})
// 2s 后输入,执行后果 --- value 2

二、async 和 await
async 和 await 合并应用,能够让 promise 的调用更加的简洁,看上去就像是同步的。
(1) async 润饰函数,函数执行的返回值是一个 promise 对象,后果由函数的返回值决定,当没有返回值或者返回任意非 promise 的值时,状态为胜利,当返回 promise,由返回的 promise 里的执行的后果决定。
另外,async 可不与 await 一起应用,但 await 必须在 async 函数中应用

(2) await 后跟表达式,能够是 promise,也能够跟非 promise,当前面的表达式是 promise 时,await + 表达式的后果为 promise 的执行后果,当表达式不是 promise 时,await + 表达式的后果为表达式本身。

(3) await 的执行须要放在 try catch 外面进行谬误的捕捉,如果没有捕捉谬误,那么出错了代码就不能向下进行
格局如:

try {// await 的执行代码} catch(error){// 谬误的解决代码}

正文完
 0