zoukankan      html  css  js  c++  java
  • Promise.all和Promise.race区别,和使用场景

    一、Pomise.all的使用

    常见使用场景 : 多个异步结果合并到一起

    Promise.all可以将多个Promise实例包装成一个新的Promise实例。用于将多个Promise实例,包装成一个新的Promise实例。

    1.它接受一个数组作为参数。

    2.数组可以是Promise对象,也可以是其它值,只有Promise会等待状态改变。

    3.当所有的子Promise都完成,该Promise完成,返回值是全部值的数组。

    4.如果有任何一个失败,该Promise失败,返回值是第一个失败的子Promise的结果。

    Promise.all([p1,p2,p3])

    先举例之前我们 如果有多个异步请求,但是最终用户想要得到的是  多个异步结果合并到一起,用之前代码举例

     console.log('start');
      var result1,result2="";
      //settimeout 模拟异步请求1
      setTimeout(() => {
        result1="ok1"
      }, 2000);
      //settimeout 模拟异步请求2
      setTimeout(() => {
        result1="ok2"
      }, 3000);
      //等待 异步1 异步2结果
     var tempInterval= setInterval(()=>{
        if(result1&&result2){
          console.log('data result ok ,,, clearInterval')
          clearInterval(tempInterval);
        }
      },100)

    使用Promise.all来解决 ,上代码

    let p1 = new Promise((resolve, reject) => {
      resolve('成功了')
    })
    
    let p2 = new Promise((resolve, reject) => {
      resolve('success')
    })
    
    let p3 = Promse.reject('失败')
    
    Promise.all([p1, p2]).then((result) => {
      console.log(result)               //['成功了', 'success']
    }).catch((error) => {
      console.log(error)
    })
    
    Promise.all([p1,p3,p2]).then((result) => {
      console.log(result)
    }).catch((error) => {
      console.log(error)      // 失败了,打出 '失败'
    })
    二、Pomise.race的使用

    类似于Promise.all() ,区别在于 它有任意一个返回成功后,就算完成,但是 进程不会立即停止

    常见使用场景:把异步操作和定时器放到一起,如果定时器先触发,认为超时,告知用户

    let p1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('成功了')
      }, 2000);
    })
    
    let p2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('success')    
      }, 5000);
    })
    
    
    Promise.race([p1, p2]).then((result) => {
      console.log(result)               //['成功了', 'success']
    }).catch((error) => {
      console.log(error)
    })
  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/richard1015/p/9155564.html
Copyright © 2011-2022 走看看