1.同步vs异步

同步和异步在程序执行是相反的,同步执行指令是分先后顺序的,就像排队打饭一样,按照顺序执行。异步执行不按照先后到达的顺序,准备好了就可以进行,不会造成进程阻塞的问题。JS是单线程的,如果按照同步执行的顺序执行代码,很容易造成阻塞,影响程序执行的性能。由此可见,异步编程在JS中的地位。

2.异步编程常用场景

  • 回调函数
  • 事件监听
  • Promise
  • Generator
  • async / awit

在以上场景下,会容易出现回调地狱的现象(多层回调函数互相嵌套),那如何解决回调地狱呢?

3.promise核心

在这一部分主要介绍promise和promise API

  • 什么是promise

可以将promise理解为容器,内部保存的是未来某个时刻才会执行完的事件。从语法上看,promise是一个对象,从它可以获得异步操作的消息。

  • promise状态机

promise有三个状态:

pedding(待定):初始状态,既没有完成,也没有拒绝

fulfilled(完成):操作成功完成

rejected(拒绝):操作失败

  • promise中常用方法

promise.prototype.then( )

为契约添加处理程序的主要方法,最多接收两个参onResolved,onReject分别进入“兑现”和“拒绝”状态时执行。

promise.prototype.catch()

用于给promise添加拒绝处理程序,该方法仅接收一个参数onReject的处理程序。事实上,这个方法就是一个语法糖,调用它相当于调用Promise.prototype.then(null, onRejected)

promise.prototype.finally()

在promise转化为解决或者拒绝状态时都会执行,这个方法可以避免处理和拒绝状态中的冗余代码部分。

Promise.all()

参数:接收一个可迭代对象

此方法用于汇总多个promise异步请求并行操作,当所有结果成功返回时按照请求顺序返回成功;其中如果有一个请求失败则返回失败。

Promise.race()

参数:接收一个可迭代对象

race()返回一个promise,只要参数的promise之中有一个实例率先改变状态,则race方法的返回状态就跟着改变。

Promise.allSetted()

接收一个promise数组,返回一个新的promise

当promise.allSetted全部处理完成后,可以拿到每个promise的状态,而不管其是否处理成功。

JavaScript异步Promise相关推荐

  1. JavaScript异步函数Promise①——Promise筑基

    期约是对尚不存在的一个替身.期约(promise)这个名字最早是由 Daniel Friedman和 David Wise在他们于 1976 年发表的论文"The Impact of App ...

  2. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

  3. JavaScript异步与Promise基本用法(resolve与reject)

    Promise解决的问题 相信每个前端都遇到过这样一个问题,当一个异步任务的执行需要依赖另一个异步任务的结果时,我们一般会将两个异步任务嵌套起来,这种情况发生一两次还可以忍,但是发生很多次之后,就形成 ...

  4. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  5. JavaScript异步调用的发展历程

    同步与异步 通常,代码是由上而下依次执行的.如果有多个任务,就必须排队,前一个任务完成,后一个任务才能执行.这种连续的执行模式就叫做同步. a(); b(); c(); 复制代码 上面代码中,a.b. ...

  6. JavaScript异步精讲,让你更加明白Js的执行流程!

    JavaScript异步精讲,让你更加明白Js的执行流程! 问题点 什么是单线程,和异步有什么关系 什么是 event-loop jQuery的Deferred Promise 的基本使用和原理 as ...

  7. 细说JavaScript异步函数发展历程

    2019独角兽企业重金招聘Python工程师标准>>> < The Evolution of Asynchronous JavaScript >外文梳理了JavaScri ...

  8. 写给初学者的JavaScript异步编程和背后思想

    导读: 对于接触JavaScript这门编程语言没有多久的本菜鸡而言,在相当长的一段时间内,我都完全无法理解这门语言中的异步编程,不明白什么叫异步编程以及为什么需要异步编程.为什么顺序执行程序就不行了 ...

  9. Javascript异步编程之一异步原理

    本系列的例子主要针对node.js环境,但浏览器端的原理应该也是类似的. 本人也是Javascript新手,把自己这段时间学习积累的要点总结下来,希望可以对同样在学习Javascript/node.j ...

最新文章

  1. 导致美国大范围网络瘫痪的Mirai僵尸网络
  2. webpack 项目使用webpack-dev-server 自动编译 (2)
  3. Java网络编程实例---------------------------------基本HTTP客户端及服务端多线程
  4. linux下听MP3
  5. 如何制作python检查小软件_如何用Python制作整蛊小程序
  6. [html] 写H5和小程序有什么相同及不同的地方吗?
  7. 56py无锡官方网站2013最新
  8. 20220103:力扣第274场周赛(上)
  9. Docker cpu memory quota使用说明
  10. 如何改变tabcontrol控件背景色和标签字体和颜色_如何利用标签打印软件将网址信息转成带logo的二维码...
  11. cisco路由器基本实验之六 CHAP and RIP (Boson NetSim)
  12. 二十一天学通C语言:C语言中指针排序
  13. 连文件搜索都不会用,也不自己反省一下?
  14. Zookeeper 客户端 Curator 使用详解
  15. c3p0连接池配置说明
  16. 【第1164期】从前端技术到体验科技
  17. 机房管理系列之电话交换机
  18. 实变函数—有限覆盖定理的证明
  19. Deep Learning(深度学习)资料汇总
  20. 利用框架效应达成目的

热门文章

  1. RTD LCD/OLED显示芯片系列
  2. mobileemumaster文件夹怎么删除_国产手机文件夹怎么全是英文名?到底哪些能删除?这下终于清楚了...
  3. 数据库原理与应用研究报告-在线救援物资求助系统
  4. 敏捷CSM小知识:“完成”的定义
  5. js 节点相关内容介绍 创建、删除、复制节点
  6. Verilog中generate的用法
  7. SQL Subquery
  8. 正则表达式括号的使用
  9. Python保留字总结
  10. Linux配置jdk1.8环境变量