Callback、Promise、async/await

一、Callback回调函数
例子:

asyncFun1((err,result1)=>{
  if(err){
    console.error(err)    
  }
  asyncFun2((err,result2)=>{
    if(err){
       console.error(err)    
     }
     asyncFun3(()=>{
       if(err){
          console.error(err)
        }
     },result2)//把前面操作的结果result2传进来
  },result1)
})

callback函数应用举例:


image.png

image.png

就是通过callback回调函数来传回数据

缺点:多重嵌套,容易造成“回调地狱”,解决办法是Promise
二、Promise
例子:

asyncFun1()//内部函数执行是异步的,不知道什么时候执行成功,所以如果成功就调resolve(),失败就调reject()
.then(result=>{//然后作为then的参数接收调用结果,then('success','failure'),这里failure可选
  return asyncFun2(result)//又是一个Promise对象
})
.then(result=>{
  return asyncFun3(result)
})
.catch(err=>{//统一的catch做错误处理
  console.error(err)
})

promise应用举例:


image.png

image.png

也就是通过返回一个promise对象,把收到的结果放到成功之后的resolve函数里传回到调用该函数的地方

缺点:不能用try/catch,并且还是一个异步形式的代码(心智负担),解决办法是async/await
三、async/await
例子:

async function asyncMain(){//async表示函数里有异步操作
  try{
    const result=await asyncFun1()//await表示紧跟在后面的表达式需要等待结果
    result=await asyncFun2(result)
    result=await asyncFun3(result)
  }catch(e){
    console.error(e)
  }
}
asyncMain()

注:对async/await的补充
其实async函数就是Generator函数的语法糖,其本质是Generator函数,以下为Generator函数的介绍。
例子:

function* gen(x){//有个内部指针(遍历器)g
  var y=yield x+2;//异步操作需要暂停的地方用yield声明
  return y;
}

执行用next(),如var g=gen(1);g.next()就是进行第一个yield输出3,再g.next()因为没有yield需要执行了就返回undefined,当然如果执行g.next(2)就返回传的参数2

参考:https://zhuanlan.zhihu.com/p/23249103?utm_medium=social&utm_source=weibo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 之前在知乎上听了个live,当时在发布,没认真听、也没怎么听清,今天又重新听了一遍,理了一下中间的技术以及一些知识...
    shaocx阅读 1,136评论 0 0
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,438评论 5 22
  • 简单介绍下这几个的关系为方便起见 用以下代码为例简单介绍下这几个东西的关系, async 在函数声明前使用asyn...
    _我和你一样阅读 21,548评论 1 24
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,862评论 1 56
  • 黑风衣男子驱车来到一个不显眼的院落,老板和黑衣男子像是熟悉似的几句寒暄,黑衣男子安排好一切之后在我对面坐了...
    桑小晨7阅读 480评论 0 2

友情链接更多精彩内容