es5中的回调函数和es6中的Promise对象理解

2 篇文章 0 订阅

es5中的回调函数指的是一个函数作为参数传递到另一个函数中,这个作为参数的函数就是回调函数,下面以代码来仔细说明:

function text(){  //回调函数--作为参数
  console.log('111');
}
function last(func){
  func()
}
last(text);

以上只是调用一次函数的情况,当我们调用多次函数的时候,并且每一个函数都嵌套起来,这样就会代码变得冗余,如下所示:

// 多次调用函数并嵌套
function calltest(call){
  setTimeout(function(){
    call()
  },1000)
}
//循环调用--每隔一秒调用一次韩式calltest打印出结果
calltest(function(){
  console.log(111)
  calltest(function(){
    console.log(222)
    calltest(function(){
      console.log(333)
      calltest(function(){
        console.log(444)
      })
    })
  })
})

这时候我们就可以使用es6的Promise对象,Promise是一种异步编程,比es5的回调函数和事件更加的便捷,Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败)。以下使用代码示例表示这个过程:

// Promise对象
function callbast(){
  return  new Promise((resolve,reject) => {
    setTimeout(()=> {
      resolve()
    },1000)
  })
}

callbast().then(() => {
  console.log(111)
  return callbast()
}).then(() => {
  console.log(222)
  return callbast()
}).then(() => {
  console.log(333)
  return callbast()
}).then(() => {
  console.log(444)
  return callbast()
})

该种写法和上边的es5写法是一样的,都会每个一秒打印出结果,Promise通过then方法实现,then方法可以接受两个回调函数做为参数,第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是函数是Promise对象的状态变为Rejected的时候调用。所以以上代码才会在函数callbast中的Promise对象中调用resolve,下面callbast函数调用之后使用then方法中返回函数callbast是重新创建一个Promise对象,实现函数的回调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值