Promise

作者: 小芬芬007 | 来源:发表于2020-03-09 18:59 被阅读0次

    回调:

    1.把一个函数A传给另一个函数B调用,那么A就是回调函数。

    function B(){ A() //调用方式:回调 } function A(){}

    eg.具名回调

    function 获取用户信息(fn){ fn('姓名:笨笨') } function 打印用户信息(用户信息){ console.log(用户信息) } 获取用户信息(打印用户信息) //这里的打印用户信息对应 fn这个函数 //调用'获取用户信息'这个函数时,给它传了一个函数(打印用户信息)

    // 匿名回调

    function 获取用户信息(fn){ fn('姓名:笨笨') } 获取用户信息(function (用户信息){ console.log(用户信息) })

    2.回调缺点:

    1.回调地狱

    2.不知道怎么使用 Node\JQuery

    clipboard.png

    promise可以让地狱变成只有一层,然后用简单的api(.then)将他们链接起来。

    function 获取用户信息(){
        return new Promise(function(resolve,reject){
            //返回一个promise对象,所以最后才能用.then
            console.log('第一次获取用户信息')
            resolve('姓名笨笨')
        })
    }
    function 打印用户信息(用户信息){
        return new Promise(function(resolve,reject){
            console.log(用户信息)
            resolve()
        })
    }
    function 获取另一个用户信息(){
        return new Promise(function(resolve,reject){
            console.log('第二次获取用户信息')
            recolve('姓名小白')
        })
    }
    获取用户信息()
        .then(打印用户信息)
        .then(获取另一个用户信息)
        .then(打印用户信息)
    

    promise用法:

    function 获取用户信息(name){
        return new Promise (function(resolve,reject){
            if(name === '笨笨'){
                resolve(['笨笨','是个小胖子'])
            }else{
                reject('不认识')
            }
        })
    }
    function 获取好友信息(name){
        return new Promise(function(resolve,reject){
            if(name ==='笨笨'){
                resolve('张三、李四、王五')
            }else{
                reject()
            }
        })
    }
    function 打印信息(data){
        return new Promise(function(resolve,reject){
            console.log(data)
            resolve(data[0])
        })
    }
    function 打印失败理由(理由){
        return new Promise(function(resolve,reject){
            console.log('失败的理由'+理由)
            reject('搞不定,我太渣了') //我没有搞定失败,后面的成功回调不要执行
            //如果没有这句,后面会继续执行,因为没有return
        })
        // 也可以直接return一个Promise.reject
        return Promise.reject('没搞定')
    }
    function 打印上次失败理由(理由){
        console.log('前面好像没搞定,理由是'+理由)
    }
    获取用户信息('笨笨') //这里只能获取到promise对象
        .then(打印信息,打印失败理由) //只有'打印信息,打印失败理由'都成功了才能执行'获取好友信息'
        .then(获取好友信息,打印上次失败理由) //当上面有一个失败,就走'打印上次失败理由'
        .then(打印信息)
    

    await 用法:

    let 用户信息 = 获取用户信息('笨笨') //这里可以直接获取到成功
    //获取成功、失败方法
    try{
        let 用户信息 = 获取用户信息('笨笨')
        console.log(用户信息)
    }catch(error){
        console.log('失败的理由是'+error)
    }
    
    其他api

    .catch //只处理失败的函数

    .catch(function(){})  
    //等同于  
    .then(null,function(){})
    

    .finally //无论失败或者成功都执行

    .finally(f1)
    //等同于
    .then(f1,f1)
    

    .all //等多个promise都成功后在执行

    Promise.all([P1,P2,P3]).then(function(values){
        console.log(values)
    })
    

    .race //只要有一个成功就调用

    Promise.race([P1,P2,P3]).then(function(value){
        console.log(value)
    })
    

    相关文章

      网友评论

          本文标题:Promise

          本文链接:https://www.haomeiwen.com/subject/grqmdhtx.html