zoukankan      html  css  js  c++  java
  • promise的基本使用和理解

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。

    特点

    1.有三种状态

      (1)   padding:等待(进行中)

    (2)Fulfilled:满足(已成功)调用resolve

    (3)reject:拒绝(已经失败)会调用reject

    我用了setTimeout函数来模拟异步请求

      //使用Promise解决三次网络请求
      //第一次发送请求
      new Promise((resolve, reject) => {
        setTimeout(()=>resolve("jiang"),1000)
      }).then((date)=>{
        console.log(date);
        //第二次发送请求
        return new Promise((resolve, reject) => {
          setTimeout(()=>resolve("shan"),1000)
        })
      })
          .then((date)=>{
        console.log(date);
        //第三次发送请求
        return new Promise((resolve, reject) => {
          setTimeout(()=>resolve("os"),1000)
        })
      })
          .then((date)=>{
        console.log(date)
      })

    可以看出在Promise内传入函数后,会自动回调生成两个参数resolve和reject,并且这两个参数又是函数.

    在setTimeout里回调了resolve传入data,之后回调了resolve内的then()方法,并完成了请求成功的后续操作。

    然后我又重复了这一操作,完成了三次异步操作。优点是解决了回调地狱,以及拥有链式编程的美感。

    2.catch

    .catch是请求失败时所调用的方法和then类似在书写时可以在.then后写.catch

    new Promise((resolve, reject) => {
        //setTimeout(()=>resolve("jiang"),1000)
        setTimeout(()=>reject("err"),1000)
      }).then(date=>{
        console.log(date)});
    .catch(date=>{console.(data)})

    当然可以不用值么麻烦查看then源码后可以得知then内可以传递两个回调参数then(函数1,函数2)

    new Promise((resolve, reject) => {
        //setTimeout(()=>resolve("jiang"),1000)
        setTimeout(()=>reject("err"),1000)
      }).then(date=>{
        console.log(date)},erro=>
    {console.(erro)}

    );

     然后分析了一些promise的题和后得知了在创建了new Promise((resolve, reject)后后面的可以简写或者不写简写为 new  Promisde.reslve() 

    reject也可以用throw来抛出异常

    并且学到了一个新知识Promise.all([])在翻源码时看不懂但看得懂[]那就是传数组呗,又查了些资料
    Promise.all([])可以用来得到两个或多个异步操作的结果并进行统一操作之前用ajax得再创个函数接收两个的请求结果并且还要做一下判断,
    而用
      Promise.all([
        new Promise((resolve) =>
            setTimeout(() => resolve("jiang"), 1000)
        ),
        new Promise((resolve) =>
            setTimeout(() => resolve("shan"), 1000))
        ])
          .then(data => {
        console.log(data)
      })


  • 相关阅读:
    前端必须掌握的 docker 技能(2)
    前端必须掌握的 docker 技能(1)
    异步 map 和模块打包
    import 和组件库按需引入
    babel-node 和 nodemon
    linux和mac 终端代理
    yarn.lock 是干什么的
    pwa 总结
    设计模式(5): vue 不监听绑定的变量
    django+celery+redis应用
  • 原文地址:https://www.cnblogs.com/jiangxiaoming/p/13617656.html
Copyright © 2011-2022 走看看