首页 > 其他分享 >promise.all和promise.race途中出现错误运行情况

promise.all和promise.race途中出现错误运行情况

时间:2023-09-07 16:35:37浏览次数:33  
标签:race console resolve 途中 promise reject Promise log

1.promise.all

a.在使用时,如果中间不出错返回reject,会在.then()后返回每一个promise的resolve()返回的内容。

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      console.log('成功2')
      resolve('成功2')
      // reject('失败原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.all([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印结果为:

b.在使用时,如果有一项出现错误返回reject,会直接走catch,取到reject返回的错误信息,但不影响之后的promise,其他的promise会正常执行,只是结果拿不到。

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      // console.log('成功2')
      // resolve('成功2')
      reject('失败原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.all([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印的结果为:

总结:1.Promise.all 里面参数为一个数组,数组的每一项是一个返回promise 的函数调用;

2.then 的第一个参数是所有promise都成功的调用,返回结果是一个数组,数组的每一项为函数promise 的返回结果;

3.执行期间有一个返回rejcet则执行失败回调,拿到的是第一个失败得值,其他promise进程不受影响;

 

2.promise.race(只看谁先完成返回谁)

如果全部是正常resolve,看谁快返回的.then(res)结果值是谁

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      console.log('成功2')
      resolve('成功2')
      // reject('失败原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.race([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印结果为:

如果第一个就出现错误返回reject,则走错误回调,返回错误的值

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      // console.log('成功2')
      // resolve('成功2')
      reject('失败原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
//注意p1,p2位置 Promise.race([p2(),p1(),p3()]).then((res)=>{ console.log(res,"res") }).catch((err)=>{ console.log(err,"err") })

  打印结果为:

 

标签:race,console,resolve,途中,promise,reject,Promise,log
From: https://www.cnblogs.com/yangc6925/p/17685295.html

相关文章

  • 在Android中用e.printStackTrace()
    IsitabadideatouseprintStackTrace()inAndroidExceptions?upvote35downvotefavorite7IsitabadideatouseprintStackTrace()inAndroidExceptionslikethis?}catch(Exceptione){e.printStackTrace();}}catch......
  • 能ping通tracert不通
    参考:https://m.yisu.com/zixun/46528.htmltracert通需要交换机须配置icmp协议选项(发送端口不可达错务和发送TTL超时错误)若经过防火墙还需要安全策略放行对于bgp协议可能需要使用winMTR工具测试......
  • [TRACE]Admin中描述更改的查询
     1.select*fromt_nomenwhereet_refakf_se='6567863JWA'andet_typtra='U'andet_refakf_compisnull//查询出id_nomen:2141532.select*fromt_simowhereet_nomen=214153andet_modeop_pereisnullandsimo_fin_validiteisnull//查询出id_s......
  • Promise 封装 Ajax
    Ajax请求是前端使用频率最高的功能之一,虽然现在有各种各样的工具库能够实现快速简洁的调用Ajax接口,但是在一些特定项目中,我们可能就是需要使用原生Ajax来发送请求。今天我们就来尝试着使用Promise封装一下原生Ajax,改善其回调冗长的问题。封装封装的主要思路就是:如果成......
  • What's the difference between Async Await and Promise in JavaScript All In One
    What'sthedifferencebetweenAsyncAwaitandPromiseinJavaScriptAllInOneAsyncvsPromisedemos(......
  • 全局调用链路traceId网关到业务层、feign调用统一问题记录
           项目里面使用的traceId是基于skywalking进行打印的,但是实际使用的过程中发现网关处的traceId为空,而且feign调用其他服务时候的traceId都不一样。显示如下:       网关traceId为空:           基于此,想要把项目里面的......
  • Promise
    ......
  • react hooks中使用promise.all
    useEffect(async()=>{constgetFirstResponse=async()=>{try{returnawaitaxios.get('http://first-api',{params:{carId:id},});}catch(error){returnerror;}};......
  • mysql 深入学习三 索引优化二 (索引下推、trace工具)
    使用上一篇的表并插入测试数据#‐‐插入一些示例数据dropprocedureifexistsinsert_emp;delimiter;;createprocedureinsert_emp()begindeclareiint;seti=1;while(i<=100000)doinsertintoemployees(name,age,position)values(CONCA......
  • promise 并发请求-Promise.all()/Promise.allSettle()
    方法定义//request.js定义exportfunctionall(requests,callback){Promise.all(requests).then(params=>callback(params)).catch(error=>{console.error(error)})}exportfunctionallSettle(requests,callback){Promise.allSettl......