zoukankan      html  css  js  c++  java
  • promise 异步编程

      Promise es6 是异步编程的解决方案;

      回调里面套回调,次数过多,造成的现象叫,回调地狱

      promise 提供了三种状态,分别是 pending 进行时的状态,fulfilled 成功的状态,它会自动调用一个叫 resolve 的方法,rejected 拒绝的状态,会自动调用 reject 这个方法

      用法:

        var p = new Promise(function(resolve,reject){    // Promise 的实例只能这么使用

          resolve(res)    // 成功的回调

          reject(err)       // 失败的回调

        })

        现在 p 就是 Promise 的实例,实例上有两个方法,一个代表成功的 then ,一个代表失败的 catch

        p.then(function(res){

          console.log(res)    // 成功后响应

        }).catch(function(err){

          console.log(err)    // 失败后响应

        })

        注意事项:1. 成功 (resolve) 和拒绝 (reject) 二选一 (只能选一个) 

             2. 当是 resolve 的时候,其实就是调用 then 这个方法

             3. 当是 reject 的时候,其实就是调用了 catch 这个方法

        Promise 对异步代码的整合

      promise 的三种使用方法 es6 写法

        1. 基本用法

        new Promise((resolve,reject)=>{

          resolve()

          reject()

        }).then(res=>{

          console.log(res)

        }).catch(err=>{

          console.log(err)

        })

        2. 链式调用,

        new Promise((resolve,reject)=>{

          resolve(res)

          reject(err)

        }).then(res=>{

          console.log(res);

          return new Promise((resolve,reject)=>{

            resolve(res)

            reject(err)

          })

        }).then(res=>{

          console.log(res)

        }).catch(err=>{

          console.log(err)

        })

      3. 并发 (一起进行异步处理)

        var p1 = new Promise((resolve,reject)=>{

          resolve(res)

          reject(err)

        })

        var p2 = new Promise((resolve,reject)=>{

          resolve(res)

          reject(err)

        })

        Promise.all([p1,p2]).then(res=>{

          console.log(res)

        }).catch(err=>{

          console.log(err)

        })

      Promise 中不能实现功能,让 .then() 去实现

      数组中的异步都成功了才执行 then() 方法,有一个不成功才会执行 catch 的方法

      不要让项目产生过多的对第三方的依赖

  • 相关阅读:
    MongoDB集群运维笔记
    第十八节:SSM搭建之分层、聚合、继承、属性、版本管理、资源配置、多环境、跳过测试
    第十六节:SpringMvc拦截器、全局异常处理、RestFul风格编程、文件上传
    Java认证授权框架Spring Security介绍
    干货:RabbitMQ消息队列基本原理介绍
    微服务开发框架 SpringCloud
    Pygame实战项目:用300行代码写出贪吃蛇小游戏
    内外盘
    [转贴]太有用了,留存!Kaggle数据下载
    shell执行报错: bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法
  • 原文地址:https://www.cnblogs.com/shangjun6/p/11342003.html
Copyright © 2011-2022 走看看