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