重新炒一炒Promise(上)

创建未决的 Promise

此构造器接受单个参数:一个被称为执行器(executor )的函数,包含初始化 Promise 的代码。该执行器会被传递两个名为 resolve()与 reject() 的函数作为参数。

  • resolve() 函数在执行器成功结束时被调用,用于示意该Promise 已经准备好被决议( resolved ),
  • reject() 函数则表明执行器的操作已失败。

作业调度( job scheduling )

执行器会在 readFile() 被调用时立即运行。当 resolve() 或 reject() 在执行器内
部被调用时,一个作业被添加到作业队列中,以便决议( resolve )这个 Promise 。
在这里插入图片描述

const pro = new Promise((res,rej)=>{
  console.log('我是Promise里面的')
  setTimeout(()=>{
    console.log('我是计时器里面的')
  },2000)
})
pro.then(function(val){
  console.log(val)
},function(err){
  console.log(err)
} )

console.log("我是最外面的")

Promise的生命周期

  1. pending :挂起,表示未结束的 Promise 状态。相关词汇“挂起态”。
  2. fulfilled :已完成,表示已成功结束的 Promise 状态,可以理解为“成功完成”。相关
    词汇“完成”、“被完成”、“完成态”。
  3. rejected :已拒绝,表示已结束但失败的 Promise 状态。相关词汇“拒绝”、“被拒
    绝”、“拒绝态”。
  4. resolve :决议,表示将 Promise 推向成功态,可以理解为“决议通过”,在 Promise
    概念中与“完成”是近义词。相关词汇“决议态”、“已决议”、“被决议”。
  5. unsettled :未决,或者称为“未解决”,表示 Promise 尚未被完成或拒绝,与“挂
    起”是近义词。
  6. settled :已决,或者称为“已解决”,表示 Promise 已被完成或拒绝。注意这与“已完
    成”或“已决议”不同,“已决”的状态也可能是“拒绝态”(已失败)。
  7. fulfillment handler :完成处理函数,表示 Promise 为完成态时会被调用的函数。
  8. rejection handler :拒绝处理函数,表示 Promise 为拒绝态时会被调用的函数。

Promise的状态

【PromiseState】

  • pending 未决定
  • resolved / fullfilled 成功
  • rejected 失败
    在这里插入图片描述

Promise对象的值

【PromiseResult】

  • reject
  • resolve

Promise-catch

对错误结果进行处理
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210309111324424.png

Promise-reject

【【PromiseResult】】一定是rejected

  1. 会抛出错误,可以用catch解决
    在这里插入图片描述

  2. 就算reject传入的是Promise对象中的成功函数返回结果都是失败的

在这里插入图片描述

响应多个 Promise

Promise.all

  1. 可迭代对象的元素都是 Promise ,只有在它们都完成后,所返回的 Promise 才会被完成。
    在这里插入图片描述
  2. 若传递给 Promise.all() 的任意 Promise 被拒绝了,那么方法所返回的 Promise 就会立刻被
    拒绝,而不必等待其他的 Promise 结束:
  let p1 = new Promise((resolve, reject) => {
    resolve('p1----')
  })
  let p2 = Promise.reject('p2-----')
  let p3 = Promise.resolve('p3-----')
  const res = Promise.all([p1, p2, p3])
  console.log(res)

在这里插入图片描述

Promise.race()

此方法也接受一个包含需监视的 Promise 的可迭代对象,并返回一个新的 Promise ,但一旦来源 Promise 中有一个被解决,所返回的 Promise 就会立刻被解决。
在这里插入图片描述

Promise.then()

then()的调用是对上一个Promise对象的resolve()或者reject()函数进行处理,并对其结果进行打印

在这里插入图片描述

Promise链中断

在这里插入图片描述

利用Promise封装读取文件函数,可以多个文件读取

 const fs = require('fs')
// fs.readFile('./fs1.txt',(err,data)=>{
//   console.log(data.toString())
// })
function mineReadFile(path){
  return new Promise((resolve,reject)=>{
    fs.readFile(path,(err,data)=>{
      if (err){
        reject(err)
      }
      resolve(data.toString())
    })
  })
} 
mineReadFile('./fs1.txt').
then((val)=>{
  console.log(val)
  return mineReadFile('./fs2.txt')
}).then((val)=>{
  console.log(val)
  return mineReadFile('./fs3.txt')
}).then((val)=>{
  console.log(val)
})

Promise封装ajax请求

 const p = new Promise((resolve, reject) => {
    //初始化
    const x = new XMLHttpRequest()
    //f发送请求
    x.open('Get', 'https://api.apiopen.top/getJoke')
    //发送请求
    x.send()
    x.onreadystatechange = function () {
      if (x.readyState === 4) {
        if (x.status >= 200 && x.status < 300) {
          resolve(x.response)
        } else {
          reject(x.status)
        }
      }
    }

  })

参考《深入理解ES6》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值