标签: Promise

  • 初识Promise

    目的: Promise 是书写异步代码的另一种方式, 解决回调函数嵌套的问题(回调地狱)

    基本语法

    创建Promise对象

    new Promise的时候会执行传入的函数

    //Promise对象传入一个函数,函数提供两个函数参数resolve、reject
    const promise = new Promise((resolve, reject) => {
      // 内部封装一个异步操作
    
      // 成功则调用resolve
    
      // 失败调用reject
    })

    使用

    promise.then((res) => { ... }).catch((err) => { ... })

    Promise是一个构造函数

    Promise.prototype上包含then()catch()方法

    通过then方法来指定成功的回调函数

    通过catch方法来指定失败的回调函数

    Promise的三种状态

    • pending: 待定(等待结果
    • fulfilled: 成功 (已兑现), 调用了 resolve, Promise的状态就会被标记成成功
    • rejected: 失败 (已拒绝), 调用了 reject, Promise的状态就会被标记成失败

    一旦Promise的状态发生变化,状态就不会再改变了!就像他的名字Promise一样,承诺了就不会改变。

    Promise链式调用

    解决回调地狱的问题

    因为 Promise.prototype.thenPromise.prototype.catch 方法返回的是 promise,只要是 promise 对象都有这两个方法,所以它们可以被链式调用。

    import fs from 'then-fs'
    
    fs.readFile('1.txt', 'utf-8').then(res => {
      console.log('读取成功:' + res);
      return fs.readFile('2.txt', 'utf-8')
    }).then((res) => {
      console.log('读取成功:' + res);
      return fs.readFile('3.txt', 'utf-8')
    }).then((res) => {
      console.log('读取成功:' + res);
    }).catch(err => {
      console.log('读取失败:' + err);
    })