使用promise解决回调地狱

上一章了解了回调地狱的形成:多层函数互相嵌套,观赏性比较差且不便于后期维护。

使用promise可以解决这个难题

Promise是js中的一个原生对象,是一种异步编程的解决方案,可以替换掉传统的回调函数解决方案。

  • Promise构造函数接收一个函数作为参数,我们需要处理的异步任务就卸载该函数体内,该函数的两个参数是resolve,reject。异步任务执行成功时调用resolve函数返回结果,反之调用reject。
  • Promise对象的then方法用来接收处理成功时响应的数据,catch方法用来接收处理失败时相应的数据。
  • Promise的链式编程可以保证代码的执行顺序,前提是每一次在than做完处理后,一定要return一个Promise对象,这样才能在下一次than时接收到数据

promise的使用:

  • const fs = require("fs")
    
    const p = new Promise((resolve, reject) => {
      fs.readFile("./one.txt", (err, data) => {
        resolve(data)
      })
    })
    p.then(value => {
      return new Promise((resolve, reject) => {
        fs.readFile("./two.txt", (err, data) => {
          resolve([value, data])
        })
      })
    }).then(value => {
      return new Promise((resolve, reject) => {
        fs.readFile("./three.txt", (err, data) => {
          value.push(data)
          resolve(value)
        })
      })
    }).then(value => {
      let str = value.join("\n")
      console.log(str)
    })
    

 使用async、await方法

const fs = require("fs")
function readOne() {
  return new Promise((resolve, reject) => {
    fs.readFile("./one.txt", (err, data) => {
      if (err) {
        reject(err)
      }
      resolve(data)
    })
  })
}
function readTwo() {
  return new Promise((resolve, reject) => {
    fs.readFile("./two.txt", (err, data) => {
      if (err) {
        reject(err)
      }
      resolve(data)
    })
  })
}
function readThree() {
  return new Promise((resolve, reject) => {
    fs.readFile("./three.txt", (err, data) => {
      if (err) {
        reject(err)
      }
      resolve(data)
    })
  })
}

async function test() {
  let one = await readOne()
  let two = await readTwo()
  let three = await readThree()
  console.log(one + '\n' + two + '\n' + three)
}
test()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值