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)
    })
  • 相关阅读:
    Mac开发——设置关闭窗口之后点击Dock中的图标可以再次打开窗口
    添加学院的 Exchange邮箱到手持设备中
    黑苹果 装SVN工具 cornerstone无法打开解决办法——网卡内建
    解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题
    Lua中的正则表达式的使用
    C++11 标准新特性:Defaulted 和 Deleted 函数
    HTML5基础
    第一本书考试错题
    字符串
    带参数的方法
  • 原文地址:https://www.cnblogs.com/richard1015/p/9155564.html
Copyright © 2011-2022 走看看