js异步编程解决方案
这里所说的异步解决方案,主要针对了多个异步操作,并且异步操作之间相互依赖,这里总结一下解决方案。
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异步编程解决方案相关推荐
- JS异步编程的解决方案
js解决异步编程有6种方案: 1.1 回调函数 异步编程的最基本方法,把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数. 优点:简单.容易理解和实现. 缺点:多次调用 ...
- JS 异步编程的 5 种解决方案
我们知道 JS 语言的执行环境是"单线程",所谓"单线程",就是指一次只能完成一件任务,这种模式的好处是实现起来比较简单,执行环境相对单纯:坏处是只要有一个任务 ...
- 57 Node.js异步编程
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...
- JS 异步编程及常考面试题
JS 异步编程及常考面试题 并发(concurrency)和并行(parallelism)区别 涉及面试题:并发与并行的区别? 异步和这小节的知识点其实并不是一个概念,但是这两个名词确实是很多人都常会 ...
- js 异步执行_JS Asynchronous — JS 异步编程极简史
Asynchronous JS 异步编程极简史,这个故事网上已经很多人有了自己的讲述. Event Loop 解释了 Node.js 为何以及如何实现单线程服务模型和 Event Loop.对于 JS ...
- Node.js异步编程~超级详细哦
下面是对Node.js异步编程的整理,希望可以帮助到有需要的小伙伴~ 文章目录 同步API,异步API 同步API,异步API的区别 获取返回值的方式不同 代码执行顺序不同 Node.js中的异步AP ...
- JS 异步编程六种方案
前言 我们知道Javascript语言的执行环境是"单线程".也就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务. 这种模式虽然实现起来 ...
- JS 异步编程都有哪些方案?
什么是同步? 所谓的同步就是在执行某段代码时,在该代码没有得到返回结果之前,其他代码暂时是无法执行的,但是一旦执行完成拿到返回值之后,就可以执行其他代码了.换句话说,在此段代码执行完未返回结果之前,会 ...
- 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)
[学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...
最新文章
- R语言ggplot2可视化分面图(faceting)、在所有的分面中添加相同的参考基准曲线(overlay a base or reference plot to all facets )
- hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...
- Hibernate 配置C3P0 连接池
- Python-装饰器
- java中静态代码块的用法 static用法详解(转)
- 微信公众号的网页授权如何在本地调试?
- 让Ubuntu的ssh保持长时间连接
- OpenGL开发学习指南二(glfw+glad)
- 优化案例 | CASE WHEN进行SQL改写优化
- HttpClient-01基本概念
- Pycharm2018最新激活方式
- postman里测试文件上传(MultipartFile)
- spring cloud 微服务的版本介绍与内部组件详解
- HDOJ 1251 HDU 1251 统计难题 ACM 1251 IN HDU
- juc包下四大并发工具
- Java 下载 Excel模板
- QCIF CIF 2CIF 4CIF 普及
- java对接支付宝三方登录
- AsyncTask我来给你扯会蛋
- MySQL常规篇之增删改查(精选)