为什么要用promise

骑猪看日落 2023-03-02 07:34 114阅读 0赞

1.指定回调函数的方式更加灵活:
旧的必须在启动异步任务前指定
promise:启动异步任务 =》 返回promise对象 =》 给promise对象绑定回调函数(甚至可以在异步任务结束后指定)

2.支持链式调用,可以解决异步回调地狱问题
什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数 执行的条件

第二个异步任务是以第一个异步任务为前提,第三个 异步任务是以第二个异步任务为前提

回调地狱的缺点? 不便于阅读 / 不便于异常处理

  1. 解决方案: promise链式调用
  2. 终极解决方案:async/await
  3. //回调地狱 第一个异步任务 的结果 作为第二个异步任务
  4. doSomething(function(result){
  5. doSomething(function(result){
  6. doSomething(function(result){
  7. console.log("111");
  8. },failureCallback)
  9. },failureCallback)
  10. },failureCallback)
  11. //promise 没有回调函数嵌套,但还是有回调函数;纯同步写法用的async/await
  12. //promise链式调用,可以解决异步回调地狱问题,
  13. //异常传透,无论哪个 出错都会catch里的函数执行
  14. //promise:返回一个新的promise对象
  15. doSomething().then(function(result){
  16. return doSomethingElse(result)
  17. })
  18. .then(function(newResult){
  19. return doSomethingElse(newResult)
  20. })
  21. .then(function(finalResult){
  22. return doSomethingElse(finalResult)
  23. })
  24. .catch(failureCallback)
  25. async function request(){
  26. try{
  27. const result=await doSomething()
  28. const newResult=await doSomethingElse(result)
  29. const finalResult=await doSomethingElse(newResult)
  30. console.log(finalResult);
  31. }catch(error){
  32. failureCallback(error);
  33. }
  34. }

发表评论

表情:
评论列表 (有 0 条评论,114人围观)

还没有评论,来说两句吧...

相关阅读

    相关 为什么promise

    1.指定回调函数的方式更加灵活: 旧的必须在启动异步任务前指定 promise:启动异步任务 =》 返回promise对象 =》 给promise对象绑定回调函数(甚至

    相关 为什么Docker

    1、什么是Docker 什么是docker?恐怕90%的人脑子一闪而过的都是那张图:一条鲸鱼背上扛着一堆箱子,图片下方是大大的“docker”。 docker是什么?

    相关 为什么Redis

    最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾一下Redis的整个体系,来对相关知识点查漏补缺。 我按照五点把书中的内容进行一下整理:

    相关 为什么Redis

    最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾Redis的整个体系,来对相关知识点查漏补缺。 按照五点把书中的内容进行一下整理: 1、