Promise

回调:

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学习(上): 资料: JavaScript Promise迷你书 原著:azu / 翻译:liubi...
    你隔壁的陌生人阅读 3,630评论 0 1
  • 什么是同步异步 同步:当我们发出了请求,并不会等待响应结果,而是会继续执行后面的代码,响应结果的处理在之后的事件循...
    liwuwuzhi阅读 3,226评论 1 1
  • //本文内容起初摘抄于 阮一峰 作者的译文,用于记录和学习,建议观者移步于原文 概念: 所谓的Promise,...
    曾经过往阅读 5,000评论 0 7
  • 参考深入理解 Promise 五部曲 -- 1.异步问题[http://www.ghostchina.com/pr...
    合肥黑阅读 6,878评论 0 14
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 12,758评论 0 29