Promise的理解和使用

Promise的理解和使用

前言: 该文章是在学习慕课网上的 promise入门一课的笔记,大家如果有兴趣的话可以直接去看视频,这位老师讲得还不错。

概念:

  1. 官方
    1-1. promise对象用于异步计算
    1-2. promise表示一个现在,将来或用不可能可用的值
  2. 理解
    2-1. 主要用于异步计算
    2-2. 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果;
    2-3. 可以在对象之间传递和操作promise,帮助我们处理队列;

相关知识

1.同步:不同的事情严格按照顺序进行,如:步骤A,B要完全正确执行完A后才进行步骤B的处理;
2.异步:不同是事情可同时进行,如:步骤A,B可以同时进行执行;
例子:现在你需要完成两件事清,洗澡和去便利店买东西,但只有你一个人处理这些事的时候,你只能先做完一件事再去做另一件事,你不可能说一边洗澡一边去便利店买东西,这就是同步;但如果这个时候你女(男)朋友在,那你可以去洗澡,然后同时叫你的女(男)朋友在你洗澡的同时去便利店买东西,这样两件事是可以同时进行的,就是异步

用法

例子1(基础用法):

new promise(function(resolve,reject){
    //执行成功后执行回调函数
    resolve()
    //执行失败后执行的回调函数
    reject()

})
.then( val =>{ //promise成功执行完后执行该回调

    console.log(val)
})

例子2(promise最常用到的方法)

    new promise(function(resolve,reject){
        //doSomething;
        //执行成功后执行回调函数
        resolve(val);
        //执行失败后执行的回调函数
        reject(err);        
    })
    .then( val => {  //成功执行promise后执行一下代码,val为resolve中带出的参数
        console.log(valreturn new promise(function(resolve,reject){
            //doSomething;
            //执行成功后执行回调函数
            resolve(val);
            //执行失败后执行的回调函数
            reject(err);    
        })
    })
    .then( val => { //但上面then中返回的promise执行完成后执行以下代码

        console.log(val) //val为第二个promise执行成功后resolve带出的参数
    })

例子3 (promise执行失败后的处理)

    new promise(function(resolve,reject){
        //doSomething;
        //执行失败后执行的回调函数
        reject(err);        
    })
    .then( val => {  //不会被执行
        console.log(val)
    }, err => { //promise执行出现错误时执行下面代码
        console.log(err) //err为reject带出的错误信息
    })

    //第二种写法(推荐) --- 该方法得到的错误信息要比上一个会全面一些
        new promise(function(resolve,reject){
        //doSomething;  
        //执行失败后抛出错误信息
        throw new Error('this is err')

    })
    .then( val => {  //不会被执行
        console.log(val)
    })
    .catch( error => { //promise执行完成后因其内部抛出了错误,会执行下面代码
        console.log(error.message)  //this is err
    })

例子4 (综合)

    new promise(function(resolve,reject){
        //doSomething;
        let val = 'success'
        //执行成功后执行的回调函数
        resolve(val);       
    })
    .then( val => {  //promise成功执行后执行
        console.log(val// ’success'

    }, err => { //没出现错误则不会被执行
        console.log(err) 
    })
    .then( val => { //执行完上一个then立即执行下面代码
        console.log(val)  // undefind
        return new promise( (resolve, reject) => {
            let err = 'this is err';

            throw new Error(err);

        })

    }) 
    .then( val => {  //不会被执行
            console.log(val) 
        })
    .catch( error => {
        console.log(error.message)  // 'this is err'
    })

你可能感兴趣的:(JavaScript)