promise的用法

334 阅读1分钟

Promise用来解决异步编程的问题 把异步请求改成同步写法

promise是一个构造函数,通过new创建promose实例

构造函数的参数是一个回调函数

new Promise(回调函数) 回调函数有两个参数

    1. 异步请求成功执行resolve
    1. 异步请求失败执行reject

有三种状态

  • 1.pending(初始状态)
  • 2.fulfilled(已成功)
  • 3.rejected(已失败)

状态改变只有两种结果 成功或者失败 一旦状态改变 就不能再更改

Promise处理错误的方式有两种

  • 第一种在then中传递两个回调
  • 第二个回调是错误回调 第二种方式是通过catch方式来实现

Promise常用的API

  • 有then()处理回调函数
  • catch()捕获异常
  • Promose.all() 处理多个Promise对象,所有的请求都成功才成功
  • Promise.race() 处理多个Promise对象,有一个成功就成功
var p = new Promise((resolve,reject)=>{
     异步代码
     resolve(结果)   or  reject(结果)
})

模拟异步请求

  new Promise((resolve,reject)=>{
    // 模拟异步
    setTimeout(()=>{
      resolve(123)
    },1000)
  }).then(res=>{
    console.log(res);
    return 345
  }).then(res1=>{
    console.log(res1);
  }).catch((err)=>{
    // catch用来捕获错误  可以捕获reject抛出的错误
    // then()方法指定的回调函数,如果运行中抛出错误,也会被catch()方法捕获
    console.log(err,0);
  })
// 
      三个异步都都变成fullfilled   Promise.all([异步1,异步2,异步3])变成fullfilled
      Promise.all([异步1, 异步2, 异步3]).then((res) => {
        // res==[异步1结果,异步2结果,异步3结果]
      })

      // 三个异步只要有一个变成fullfilled   Promise.all([异步1,异步2,异步3])变成fullfilled
      Promise.race([异步1, 异步2, 异步3]).then((res) => {
        // res==[异步1结果,异步2结果,异步3结果]
      })