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

一、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){
  // 谬误的解决代码
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理