• Promise的基本用法(一)


    1.Promise是什么?

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。

    2.Promise的基本用法

    2.1 then中成功失败的执行

    // resolve代表成功 reject失败 都是一个函数
    
    let p = new Promise(function(reslove,reject){
    
        //reslove('成功')  //状态由等待变为成功,传的参数作为then函数中成功函数的实参
    
        reject('失败')  //状态由等待变为失败,传的参数作为then函数中失败函数的实参
    
    })
    
    //then中有2个参数,第一个参数是状态变为成功后应该执行的回调函数,第二个参数是状态变为失败后应该执行的回调函数。
    
    p.then((data)=>{
    
        console.log('成功'+data)
    
    },(err)=>{
    
        console.log('失败'+err)
    
    })

    Promise承诺:默认情况下是等待状态pending,如果有一天状态转变为成功就成功了,如果状态变成失败就失败了。状态一旦改变了就不能再改变了。

    2.2如果then中返回了一个promise 会将promise的结果继续传给第二then中(如果结果是将状态改成成功就走下一个then的成功回调,状态改为失败就走下一个then的失败回调)

    function read( content ) {
        return new Promise(function( reslove,reject ) {
            setTimeout(function(){
                    if(content>4){
                        resolve(content)
                    }else{
                        reject('小于4')
                    }
            },1000)
        })
    }
    
    read(1).then(( data )=>{
        console.log(data)
    },( err )=>{
        console.log(err) //小于4
        return read(2) //将状态改为了失败
    })
    .then(( data )=>{
        console.log('data',data)
    },( err )=>{
        console.log(err) //小于4
    })

    2.3 第一个then不管是走成功还是失败的回到函数,只要返回一个普通值(不抛出错误或者返回promise),都会执行下一个then的成功的回调

    let p = new Promise(function(reslove,reject){
        reject('失败1')
    })
    
    p.then((data)=>{
        console.log('成功'+data)
    },(err)=>{
        console.log('失败'+err) //失败失败1
    })
    .then((data)=>{
        console.log('成功1'+data) //成功1undefined
    },(err)=>{
        console.log('失败1'+err)
    })
    
    eg:抛出错误执行下一个then的失败
    
    let p = new Promise(function(reslove,reject){
        reject('失败1')
    })
    
    p.then((data)=>{
        console.log('成功'+data)
    },(err)=>{
        console.log('失败'+err) //失败失败1
    })
    .then((data)=>{
        console.log('成功1'+data) //成功1undefined
        throw Error('下一个失败')
    },(err)=>{
        console.log('失败1'+err)
    })
    .then((data)=>{
        console.log('成功2'+data)
    },(err)=>{
        console.log('失败2'+err) //失败2Error: 下一个失败
    })
  • 相关阅读:
    springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来
    实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
    不带插件 ,自己写js,实现批量上传文件及进度显示
    excel转html 实现在线预览
    word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
    实现图片旋转,滚动鼠标中间对图片放大缩小
    面试中常见问题之线程池与连接池的区别
    实例测试mysqlRR模式和RC模式各种锁情况
    分糖果
    MySQL试题
  • 原文地址:https://www.cnblogs.com/shun1015/p/12672935.html
Copyright © 2020-2023  润新知