这里所说的异步解决方案,主要针对了多个异步操作,并且异步操作之间相互依赖,这里总结一下解决方案。

1、回调函数

这是最古老的方法,尽管能解决异步相互依赖的情况,但是当异步操作过多,多层嵌套的回调函数会让代码可读性非常差,也不够优雅,另外也没有比较好的错误处理机制,例如:

$.get(path1,function(data1){$.get(path2,function(data2){$.get(path3,function(data3){console.log('done');});});
});

接下来是es6之后提出的一些解决方案:

2、promise

简单来说是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

promise对象有两个特点:

①对象的状态不受外界影响,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败),只有异步操作的结果,才能决定当前是哪种状态

②一旦状态发生改变,就不会再产生变化(pending-fulfilled,pending-rejected),这时候就称为resolved,如果改变已经发生,再给promise对象添加回调函数,也能得到结果,这与回调函数不同,回调函数的事情一旦错过,再去监听,是不会得到结果的

举个例子:

const p = new Promise((resolve,reject) => {$.get(path1,data1 => {resolve(data1);});
});
p.then(value => {console.log(value);//data1
});

上述promise对象新建后就会立刻执行,之后可以选择任何时候添加回调。

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

3、generator

4、async函数

js异步编程解决方案相关推荐

  1. JS异步编程的解决方案

    js解决异步编程有6种方案: 1.1 回调函数 异步编程的最基本方法,把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数. 优点:简单.容易理解和实现. 缺点:多次调用 ...

  2. JS 异步编程的 5 种解决方案

    我们知道 JS 语言的执行环境是"单线程",所谓"单线程",就是指一次只能完成一件任务,这种模式的好处是实现起来比较简单,执行环境相对单纯:坏处是只要有一个任务 ...

  3. 57 Node.js异步编程

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...

  4. JS 异步编程及常考面试题

    JS 异步编程及常考面试题 并发(concurrency)和并行(parallelism)区别 涉及面试题:并发与并行的区别? 异步和这小节的知识点其实并不是一个概念,但是这两个名词确实是很多人都常会 ...

  5. js 异步执行_JS Asynchronous — JS 异步编程极简史

    Asynchronous JS 异步编程极简史,这个故事网上已经很多人有了自己的讲述. Event Loop 解释了 Node.js 为何以及如何实现单线程服务模型和 Event Loop.对于 JS ...

  6. Node.js异步编程~超级详细哦

    下面是对Node.js异步编程的整理,希望可以帮助到有需要的小伙伴~ 文章目录 同步API,异步API 同步API,异步API的区别 获取返回值的方式不同 代码执行顺序不同 Node.js中的异步AP ...

  7. JS 异步编程六种方案

    前言 我们知道Javascript语言的执行环境是"单线程".也就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务. 这种模式虽然实现起来 ...

  8. JS 异步编程都有哪些方案?

    什么是同步? 所谓的同步就是在执行某段代码时,在该代码没有得到返回结果之前,其他代码暂时是无法执行的,但是一旦执行完成拿到返回值之后,就可以执行其他代码了.换句话说,在此段代码执行完未返回结果之前,会 ...

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

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

最新文章

  1. R语言ggplot2可视化分面图(faceting)、在所有的分面中添加相同的参考基准曲线(overlay a base or reference plot to all facets )
  2. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...
  3. Hibernate 配置C3P0 连接池
  4. Python-装饰器
  5. java中静态代码块的用法 static用法详解(转)
  6. 微信公众号的网页授权如何在本地调试?
  7. 让Ubuntu的ssh保持长时间连接
  8. OpenGL开发学习指南二(glfw+glad)
  9. 优化案例 | CASE WHEN进行SQL改写优化
  10. HttpClient-01基本概念
  11. Pycharm2018最新激活方式
  12. postman里测试文件上传(MultipartFile)
  13. spring cloud 微服务的版本介绍与内部组件详解
  14. HDOJ 1251 HDU 1251 统计难题 ACM 1251 IN HDU
  15. juc包下四大并发工具
  16. Java 下载 Excel模板
  17. QCIF CIF 2CIF 4CIF 普及
  18. java对接支付宝三方登录
  19. AsyncTask我来给你扯会蛋
  20. MySQL常规篇之增删改查(精选)

热门文章

  1. C语言左移右移 << >>
  2. python面试题之MySQL数据库
  3. Mysql注入绕过WAF总结
  4. 我的初恋明天就要嫁给别人了
  5. 修改Linux系统时间和时区
  6. decode函数用法
  7. css3绘制环形_css画圆,如何用纯css实现一个动态画圆环效
  8. 荣耀 Magic 5、荣耀 Magic 5 Pro和荣耀 Magic 5至臻版区别
  9. Android 欢迎动画
  10. FLV科普5 FLV Body