1. # 三. 为什么要用Promise
  2. /*
  3. 1.指定回调函数的方式更加灵活:
  4. 旧的:必须在启动异步任务前指定
  5. promise:启动异步任务 => 返回promie对象 => 给promise对象绑定回调函数(甚至可以在异步任务结束后指定)
  6. 2. 支持链式调用,可以解决回调地狱问题
  7. 什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数执行的条件
  8. 回调地狱的缺点? 不便于阅读 / 不便于异常处理
  9. 解决方案?promise链式调用
  10. 终极解决方案?async/await
  11. */
  12. // 以下代码为伪代码
  13. // 成功的回调函数
  14. function successCallback(result) {
  15. console.log("声音文件创建成功:"+ result);
  16. }
  17. // 失败的回调函数
  18. function failureCallback(error) {
  19. console.log("声音文件创建失败:"+ error);
  20. }
  21. /* 1.1 使用纯回调函数“7*/
  22. createAudioFileAsync(audioSettings, successCallback, failureCallback)
  23. /* 1.2,使用Promise */
  24. const promise = createAudioFileAsync(audioSettings);// 2
  25. setTimeout(()=> {
  26. promise.then(successCallback, failureCallback);
  27. J, 3000);
  28. /*2.1.回调地狱 */
  29. doSomething(function(result) {
  30. doSomethingElse(result, function(newResult) {
  31. doThirdThing(newResult, function(finalResult) {
  32. console.log('Got the final result:' + finalResult)
  33. }, failureCallback)
  34. }, failureCallback)
  35. }, failureCallback);
  36. //2.2. 使用promise的链式调用解决回调地狱
  37. doSomething()
  38. .then(function(result) {
  39. return doSomethingElse(result)
  40. })
  41. .then(function(newResult){
  42. return doThirdThing(newResult)
  43. })
  44. .then(function(finalResult) {
  45. console.log('Got the final result: '+ finalResult)
  46. })
  47. .catch(failureCallback)
  48. // 2.3. async/await:回调地狱的终极解决方案
  49. async function request(){
  50. try {
  51. const result = await dosomething()
  52. const newResult = await doSomethingElse(result)
  53. const finalResult = await doThirdThing(newResult)
  54. console.log('Got the final result:' + finalResult)
  55. } catch (error){
  56. failureCallback(error)
  57. }
  58. }

三. 为什么要用Promise的更多相关文章

  1. 前端学习(三十六)promise(笔记)

    一个页面:  头部.用户信息.新闻列表 jquery ajax:  1.$.ajax({    url:'',    dataType:'json', }).then(res=>{    //r ...

  2. Angular JS中 Promise用法

    一.Promise形象讲解A promise不是angular首创的,作为一种编程模式,它出现在1976年,比js还要古老得多.promise全称是 Futures and promises. 而在j ...

  3. [Node.js] Promise,Q及Async

    原文地址:http://www.moye.me/2014/12/27/promise_q_async/ 引子 在使用Node/JS编程的时候,经常会遇到这样的问题:有一连串的异步方法,需要按顺序执行, ...

  4. promise异步编程的原理

    一.起源 JavaScript中的异步由来已久,不论是定时函数,事件处理函数还是ajax异步加载都是异步编程的一种形式,我们现在以nodejs中异步读取文件为例来编写一个传统意义的异步函数: var ...

  5. angularjs promise详解

    一.什么是Promise Promise是对象,代表了一个函数最终可能的返回值或抛出的异常,就是用来异步处理值的. Promise是一个构造函数,自己身上有all.reject.resolve这几个异 ...

  6. 数组的遍历你都会用了,那Promise版本的呢

    这里指的遍历方法包括:map.reduce.reduceRight.forEach.filter.some.every因为最近要进行了一些数据汇总,node版本已经是8.11.1了,所以直接写了个as ...

  7. ES6--浅析Promise内部结构

    首发地址:sau交流学习社区 一.前言 什么是promise?promsie的核心是什么?promise如何解决回调地狱的?等问题 1.什么是promise?promise是表示异步操作的最终结果:可 ...

  8. 关于Promise的一些个人理解jQuery的deferred

      一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组), ...

  9. JS - Promise使用详解--摘抄笔记

    第一部分: JS - Promise使用详解1(基本概念.使用优点) 一.promises相关概念 promises 的概念是由 CommonJS 小组的成员在 Promises/A 规范中提出来的. ...

随机推荐

  1. promise对象总结

    一.Promise是异步编程的一种解决方案,它是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promis ...

  2. 定要过python二级 第三套

    第一模块   基础操作(共三道题) 1. 安装python 包  我在c  盘打开  但是它给我安装到了d盘得  anaconda3 下面  关键是  我在c盘  打开python .exe   创建 ...

  3. CF1375F-Integer Game【交互】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1375F 题目大意 给出\(a,b,c\).先手每次指定一个数\(k\),然后后手指定一个数字加上\(k\),若 ...

  4. ASP.NET Core中将Json字符串转换为JsonResult

    ASP.NET Core中返回JsonResult 最近在使用NET 5.0做WebApi中,发现只能返回string类型,不能用JsonResult返回实体,于是查阅资料找到解决办法. 两种方式分别 ...

  5. if 条件

    返回不能被2整除的数 result = [] iter = range(10) for i in iter: if i % 2: print(f'{i}', i % 2) result.append( ...

  6. VirtualBox上安装Debian10个人备忘笔记

    准备 VirtualBox 下载链接:Downloads – Oracle VM VirtualBox,下载完成后安装即可. Debian 下载链接:通过 HTTP/FTP 下载 Debian CD/ ...

  7. 开放下载!2021 解锁 Serverless 从入门到实战大“橙”就

    Serverless 架构即将引领云计算的下一个十年已成行业共识.处于变革中的开发者,大多已从观望状态转向尝试阶段, 越来越多 Serverless 落地场景被解锁. "Serverless ...

  8. 基于linux在线预览

    1.Libreoffice安装 在服务器上安装Libreoffice,在这里就不多说了, import os import sys import subprocess import re def co ...

  9. 某个buuctf的题(easy_tornado)

    题目:http://88099f53-12b6-470a-9993-b73e4155940e.node3.buuoj.cn/ 1首先看三个文件的内容 2简单分析 如果出题人没整一些花里胡哨的,那么fl ...

  10. 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字

    题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...