美文网首页
Promise的整理

Promise的整理

作者: 十年之后_b94a | 来源:发表于2020-03-19 10:04 被阅读0次

Promise语法用了很久,还没有好好整理过。

语法

new Promise((resolve,reject)=>{})其中resolve代表执行成功返回的,reject执行失败返回的

实例 1、

function t(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      try{
           let ran = parseInt(Math.random() * 10);
          ran < 5 ? resolve(true) : resolve(false);
      }catch(e){
          reject(e);
      }
    },parseInt(Math.random() * 301 + 200)) //200~500
  })
}

//使用:
t()  //链式调用
.then(res=>{})
.catch(e=>{})

值得注意的是:当执行了resolve函数时,后面的语句都不会在执行
ran < 5 ? resolve(true) : resolve(false);在这一段语句后面添上其他语句,并不会执行

Promise.all与Promise.race的区别

Promise.all顾名思义它会等待所有的Promise的状态变为resolve成功那么才会执行.then,并且它会返回所有的Promise的resolve的值
Promise.race它只会捕获优先执行完成的那一个Promise的resolve的值,但是其他的Promise还是会执行,但是捕获不到值了

function t(){
  return new Promise((resolve,reject)=>{
     setTimeout(()=>{
      try{
           let ran = parseInt(Math.random() * 10);
            console.log("执行了")
           resolve(ran );
      }catch(e){
          reject(e);
      }
    },parseInt(Math.random() * 301 + 200)) //200~500
  })
}

let arr = Array.from({length:10}).fill(t);//填充十个Promise待执行函数

Promise.all(arr.map(item=>item()))
.then(res=>{
    console.log(res)
})
.catch(e=>{
    console.log(e)
})

执行结果

image.png
由此可见Promise.all它会执行完所有的Promise函数才执行返回
Promise.race(arr.map(item=>item()))
.then(res=>{
    console.log(res)
})
.catch(e=>{
    console.log(e)
})

执行结果

image.png
由此可见Promise.race它只会捕获优先返回的那个值,但是其他的Promise不会因此而放弃执行

引入async/await

让语法更趋向与同步

function t(){
  return new Promise((resolve,reject)=>{
     setTimeout(()=>{
      try{
           let ran = parseInt(Math.random() * 10);
            console.log("执行了")
           resolve(ran );
      }catch(e){
          reject(e);
      }
    },parseInt(Math.random() * 301 + 200)) //200~500
  })
}

(async ()=>{
  let result = await t();
  //、、、dosome
})()

那么result就是函数的resolve返回值
如何捕获异常?那么只能借助于try{}catch(e){}

(async ()=>{
  try{
    let result = await t();
  }catch(e){
    //异常处理
  }

  //、、、dosome
})()

思考如果我不用try catch如何捕获异常?

function t(){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
        let ran = parseInt(Math.random() * 10);
        ran <= 5 ? resolve(true) : reject(new Error("错误了"));
    },parseInt(Math.random() * 301 + 200)) //200~500
  })
}
(async()=>{
    let d = await t().catch(e=>{return e});
            
        console.log(typeof d) 
})()

我只要区分d是boolean 还是object我就能知道是错误还是正确执行,并不会中止代码执行

相关文章

  • 详解ES6 Promise

    整理Promise提供的各种方法和错误处理方法。 1.Promise.resolve() 1.1 Promise....

  • Promise的整理

    Promise语法用了很久,还没有好好整理过。 语法 new Promise((resolve,reject)=>...

  • Promise API与局限性

    @NOTE 阅读完你不知道的JS---Promise后 重新整理Promise使用方式 new Promise(....

  • Promise整理

    在开发过程中,我们经常需要处理异步的情况,开发人员对异步的处理方式也从轮询到回调,再到现在的Promise。于是,...

  • Promise

    前言 回过头来整理下Promise Promise Promise的一些基本点3个state:pendingful...

  • promise

    本文是整理阮一峰大神ES6中 Promise 的学习笔记 目录: Promise.prototype.then()...

  • 初识Promise

    这是一篇很初级的有关Promise的知识整理,还有很多的知识点正在进行中... 什么是Promise Promis...

  • Promise (Bluebird) 笔记整理

    1. 基本用法 **例 1.1 创造一个Promise实例 ** 例 1.2 用then方法分别指定Resolve...

  • 如何从无到有实现Promise(上)

    前言 最近整理了两篇关于js异步的笔记,谈到异步就不得不说说 Promise。Promise 取代传统回调方式实现...

  • 手写promise

    面试的笔试题中遇到过手写promise的题目,以下是参考了网上的文章,自己整理的一个简单的promise函数:

网友评论

      本文标题:Promise的整理

      本文链接:https://www.haomeiwen.com/subject/ejrkyhtx.html