欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ES6中的promise

程序员文章站 2022-03-08 15:46:22
promise是异步编程的一种解决方法Promise对象的特点:一、对象的状态不受外界的影响,Promise有三种状态:Pending(进行中)、fulfilled(已成功)、rejected(失败),只用异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个操作。二、一旦状态改变之后就不会再改变。任何时候都可以得到这个结果。状态变化只有两种可能:从pending到fulfilled和从pending到rejected。只要改变就已经定型了。promise对象的用法promise.pr...

promise是异步编程的一种解决方法

Promise对象的特点:

一、对象的状态不受外界的影响,Promise有三种状态:Pending(进行中)、fulfilled(已成功)、rejected(失败),只用异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个操作。
二、一旦状态改变之后就不会再改变。任何时候都可以得到这个结果。状态变化只有两种可能:从pending到fulfilled和从pending到rejected。只要改变就已经定型了。

promise对象的用法

promise.prototype的原型上有then和catch方法

promise.then()用法

Promise实例生成以后, 可以用then方法分别指定Resolved状态和Reject状态的回调函数。
then方法可以接受两个回调函数作为参数。
第一个回调函数是Promise对象的状态变为Resolved时调用, 第二个回调函数是Promise对象的状态变为Reject时调用。
其中, 第二个函数是可选的, 不一定要提供。

promise.catch()用法

catch方法是用于指定发生错误时的回调函数
在执行resolve的回调( 也就是上面then中的第一个参数) 时,
如果抛出异常了( 代码出错了), 那么并不会报错, 而是会进到这个catch方法中。

  const test = new Promise((resolve, reject) => {
          resolve(1)
      })
      test.then(data => {
          console.log(data);//1
          throw ('mistake')
      }).catch(err => {
          console.log(err); //mistake
          //当抛出异常时,会在catch方法中捕捉到这个异常
      })

promise对象是构造函数本身携带的常用方法

promise.resolve(),promise.reject()用法

resolve函数的作用 : 将Promise对象的状态从’未完成’变为’成功’,在异步操作成功时调用,并将异步操作的结果作为参数传递出去
reject函数的作用:将Promise对象的状态从’未完成’变为’失败’,在异步操作失败时调用,并将异步操报出的错误作为参数传递出去

const p = new Promise((resolve, reject) => {
            const random = Math.random();
          if (random > 0.5) {
                resolve(random + '大于0.5');
            } else {
                reject(random + '小于0.5')
            }
        })
     const reslut = p.then(data => {
            console.log(data)//当随机数大于0.5 结果会传入data里面
            return data
        }, err => {
            console.log(err)//当随机输小于0.5时,结果会传入err里面
            return err
        })
     console.log(result)

ES6中的promise
ES6中的promise

Promise.all()用法
Promise.all方法用于将多个Promise实例包装成一个新的Promise实例.
all接收一个数组参数,里面的值最终都算返回Promise对象。
三个异步操作同时执行,执行完后,就会进入到then。
all会把所有异步操作的结果放在一个数组里传给then

    function test1() {
            const p = new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('测试一完成');
                    resolve('test1')
                }, 3000)
            })
            return p
        }

        function test2() {
            const p = new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('测试二完成');
                    resolve('test2')
                }, 3000)
            })
            return p
        }

        function test3() {
            const p = new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('测试三完成');
                    resolve('test3')
                }, 3000)
            })
            return p
        }
  Promise.all([test1(), test2(), test3()]).then(datas => {
            console.log(datas)

        })

ES6中的promise
promise.race()用法
race()方法与all()方法类似,不同的是race()方法谁运行的最快,则以谁为基准,返回执行最快的那个结果。
我们把上面test1,test2,test3中setTimeout的延时分别改为3000,2000,4000,调用race()方法

 Promise.race([test1(), test2(), test3()]).then(datas => {
            console.log(datas)

        })
       

ES6中的promise
从控制台输出可以看到test2的延时最短,race()方法只返回了最快的那一个结果

本文地址:https://blog.csdn.net/HLHis1996/article/details/111144225