何为promise

请问何为promise ?

先解决一个问题何为 同步 异步

  1. 同步是什么
    1. 同步就是内存中顺序执行的处理器指令
    2. 大白话就是每条指令都会严格按照他们出现的顺序来执行
      // 举例 let x = 3; // 第一个执行 x += 4; // 第二个执行 console.log(x); // 第三个执行 这就是顺序
  2. 异步是什么
    1. 类似于系统的中断
    2. 大白话就是这个代码正常执行,而下面的代码正常执行无需等待这个异步代码的执行
    console.log(1); setTimeout(()=>console.log(2),1000); // 这就是一个异步代码 console.log(3); // 输出 1 3 大约等待1s 再输出2
  3. 以往的编程模式(已经抛弃,但可学习)
    1. 这个模式太复杂了
    2. 在settimeout中使用try/catch来控制成功和失败
      function double(value,success,failure) { setTimeout(()=>{ try { if(typeof value !== "number") throw "must provide number as first argument" success(value * 2) } catch (error) { failure(error); } },1000); } const callback = (value) => console.log(value); const failure = (e) => console.log(e); double(3,callback,failure); // 输出 6 double('3',callback,failure); // 输出 must provide number as first argument
    3. 嵌套异步调用(个人感觉这个才是魔鬼)这个也是回调地狱的由来
      function double(value,success,failure) { setTimeout(()=>{ try { if(typeof value !== "number") throw "must provide number as first argument" success(value * 2) } catch (error) { failure(error); } },1000); } const callback = (value) => { double(value,(number)=>console.log(number)); }; const failure = (e) => console.log(e); // 输出结果 // must provide number as first argument // 12 // 请思考为什么 must provide number as first argument 比 12 先出现 ?

promise 此时应声而出 它是一种异步编程机制

  1. promise是es6中的知识点
    1. 首先它是es6中新增的引用类型Promise,可以使用new进行实例化
    2. 创建的时候需要传入函数作为参数
    3. promise的状态有三种
      1. pending 待定 是最初的状态,但也可以修改其开始状态
      2. fuldiled 兑现 也称 解决 resolve
      3. rejected 拒绝
      4. 可以由pending状态转换为兑现 或 拒绝状态,一旦转换状态,其状态不可逆
    4. promise的两大主要作用
      1. 抽象的表示一个异步操作
      2. 状态转换为兑现 即有一个valu 值
      3. 状态转换为拒绝 即有一个reason 值
    5. 执行函数控制promise状态
      1. resolve() =>兑现
      2. reject() =>拒绝
      3. Promise.resolve() 会返回一个promise对象,可以接收多个参数,但是只会返回第一个参数
      4. Promise.resolve() 等同于 new Promise((resolve,reject)=>resolve())
      5. 与第四点同理Promise.reject(),特殊的是这个不会被try/catch捕获到
    6. promise的实例方法
      1. then()
        1. then里面有两个函数,第一个是用来执行resolve传入的value,第二个是用来执行reject传入的reason
        2. then返回的新promise和原先的promise进行比较是false
        p.then((value)=>{},(reason)=>{});
      2. catch相当于是reject的语法糖 只接收一个参数
      3. finally是为了减少then中的onResolve方法和onReject方法出现冗余代码,主要是用来清理代码
      4. promise的传递问题暂时不理解
  2. promise.race() 任意一个完成即执行
  3. promise.add() 全部完成即执行
  4. 搭配 async / await使用

__EOF__

本文作者GTK
本文链接https://www.cnblogs.com/DnmyCourage/p/17465593.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   GTK  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示