zoukankan      html  css  js  c++  java
  • ES6

    本文不是promise的基础教程。是我个人对promise的一些知识点。

    1.Promise的状态

    Promise有三种状态: pending   fulfilled  rejected
    初始状态为 pending,pending可以变为fulfilled,或者变成rejected。但是状态变化完成后不可以再变化。

    所以如果在函数里Promise接受的函数中写了多个reslove(),也只能执行第一个噢

    2.Promise的链式调用

    首先创建两个Promise对象

     1 let state = [true, false]
     2 function getA () {
     3   return new Promise((reslove, reject) => {
     4     setTimeout(()=> {
     5       let a = Math.random()
     6       console.log('a', a)
     7       let ar = a.toString().slice(0,5)
     8       let as = state[Math.round(a)]
     9       if(as) {
    10         reslove(ar)
    11       } else{
    12         reject(ar)
    13       }
    14     }, 100)
    15   })
    16 }
    17 
    18 function getB () {
    19   return new Promise((reslove, reject) => {
    20     setTimeout(()=> {
    21       let b = Math.random()
    22       console.log('b', b)
    23       let br = b.toString().slice(0,5)
    24       let bs = state[Math.round(b)]
    25       if(bs) {
    26         reslove(br*2)
    27       } else{
    28         reject(br*2)
    29       }
    30     }, 1000)
    31   })
    32 }

    进行链式调用。

    getA().then(data=> {
      console.log('Asucess', data)
      return getB()
    }).catch (data=> {
      console.log('Afail', data)
      return false
    }).then(data=> {
      if(data) {
        console.log('Bsucess' ,data)
      } else {
      console.log(' is error ')
      }
    }).catch (data=> {
      console.log('Bfail', data)
    })

    在以上代码中,使用了两次then()方法。

    第一个then()方法返回了一个新的Promise,所以第二个.then()就是新的Promise对象的回调了。

    有人可能会问,如果第一个then()方法没有返回的不是一个Promise呢?

    那就会通过Promise.reslove()方法把返回值变成Promise对象。

    // Promise.resolve的用法
    let a = Promise.resolve(123)
    
    a.then((result) => {
        console.log(result)   // 123
    })
    
    let b = Promise.resolve({name:'xiaoming', age:18})
    
    b.then((result) => {
        console.log(result)   // {name:'xiaoming', age:18}
    })

    3.Promise.all()&Promise.race()

    Promise.all()是所有的promise状态改变后执行,race是其中一个改变就执行

     Promise.all([getA(), getB()]).then(function (results) {
        console.log(results); // 获得一个Array: [ar的值, br的值]
    });
    Promise.race([getA(), getB()]).then(function (results) {
        console.log(results); // ar的值
    });

    4.微任务

    Promise 的回调函数属于异步任务,会在同步任务之后执行。但是,Promise 的回调函数不是正常的异步任务,而是微任务(microtask)。它们的区别在于,正常任务追加到下一轮事件循环,微任务追加到本轮事件循环。这意味着,微任务的执行时间一定早于正常任务。

    setTimeout(function() {
      console.log(1);
    }, 0);
    
    new Promise(function (resolve, reject) {
      resolve(2);
    }).then(console.log);
    
    console.log(3);
    // 3
    // 2
    // 1
  • 相关阅读:
    博客
    NFS服务配置
    LAMP环境搭建与配置
    Linux系统管理技巧(下)
    Linux系统管理技巧(上)
    LVM
    安装RPM包或源码包
    Linux第四章 文件和目录管理
    MySQL主从配置 : 配置主和从(一) 配置主
    MySQL主从配置:主从介绍
  • 原文地址:https://www.cnblogs.com/daisy-ramble/p/10331364.html
Copyright © 2011-2022 走看看