Promise的4个例子

 为了加深对Promise的理解,回顾一下之前看到的4个例子。

假定doSomething()和doSomethingElse()都返回promises

 测试用例:

function doSomething() {
  return Promise.resolve('resultOfdoSomething');
}
function doSomethingElse(args) {
  console.log(`doSomethingElse的参数:${args}`)
  return Promise.resolve('resultOfdoSomethingElse');
}
function finalHandler(args) {
  console.log(`finalHandler的参数:${args}`)
}

 一、正常的连调

doSomething()
  .then(
    () => doSomethingElse()
  )
  .then(finalHandler)

运行结果

 测试结果:

分析:

  • 例子1中的then方法相当于() => {return doSomethingElse(); } 因为没有给doSomethingElse传递参数,所以它的参数是undefined。
  • finalHandler是直接作为then方法的参数,所以finalHandler会接收到上游then方法发出的值,
  • 上游then方法return了doSomethingElse(),也就是把doSomethingElse中的Promise给发出去了,所以finalHandler的参数是resultOfdoSomethingElse。

 二、then方法没有明确返回值

doSomething()
  .then(
    () => {
      doSomethingElse();
    }
  )
  .then(finalHandler)

运行结果

 测试结果:

分析:

  • 例子2中的then方法相当于() => {return doSomethingElse(); } 因为没有给doSomethingElse传递参数,所以它的参数是undefined。
  • finalHandler是直接作为then方法的参数,所以finalHandler会接收到上游then方法发出的值,
  • 上游then方法没有return任何值,所以finalHandler的参数是undefined。

三、给then方法传入错误的参数

doSomething()
  .then(
    doSomethingElse()
  )
  .then(finalHandler)

运行结果

 测试结果:

 

分析:

  • doSomethingElse的返回值(一个Promise)作为then方法的参数,不符合ES6的标准,所以这个then方法会被忽略,导致doSomethingElse和doSomething被放在相同的栈中,执行时间稍有不同
  • finalHandler是直接作为then方法的参数,所以finalHandler会接收到上游then方法发出的值,
  • 上游then由于传入错误的参数,会被忽略,所以finalHandler接收到doSomething发出的值,也就是resultOfdoSomething

四、正常的连调

doSomething()
  .then(
    doSomethingElse
  )
  .then(finalHandler)

运行结果

 测试结果:

分析:

  • doSomethingElse直接作为then方法的参数,所以它接收到doSomething发出的值,所以是resultOfdoSomething
  • finalHandler是直接作为then方法的参数,所以finalHandler会接收到上游then方法发出的值,
  • 上游then发出的值是doSomethingElse返回的Promise发出的值,所以是resultOfdoSomethingElse

由于没有在真正的项目中大规模的使用Promise,对Promise的理解还是很片面的,以后遇到问题再来记录。 

参考:https://www.jianshu.com/p/aab82c355ac4

转载于:https://www.cnblogs.com/wangtingnoblog/p/js_Promise_Dome.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值