Promise
[TOC]
任务队列和事件循环
1 | 首先js只在一个线程上运行(主线程), 但不代表js只有一个线程, 而js引擎有多个线程, 其他线程都是在后台配合; js内部采用事件循环机制(Event Loop); js在运行时除了一个正在运行的主线程, js引擎还提供了一个任务队列(task queue), 里面放着各种需要当前程序处理的异步任务(其实根据异步任务的类型, 存在多个任务队列, 为了方便理解, 这里只存在一个任务队列), js会去执行所有的同步任务,等到全部的同步任务全部执行完,就会去看任务队列里的异步任务,而如果有满足的异步任务, 那么该异步任务就会进入主线程, 成为同步任务, 执行完后, 下一个异步任务再进入主线程开始执行, 一但任务队列清空,那么该程序也就结束了 |
异步操作的基本流程控制
嵌套回调
1 | /*六个回调函数的嵌套, 一共需要花费6s, 不仅写起来麻烦, 还容易出错, 还难以维护*/ |
串行执行
1 | /*串行执行*/ |
并行执行
1 | /*并行执行*/ |
并行与串行的结合
1 | /*并行与串行的结合*/ |
定时器
1 | setTimeout()函数的第一个参数是所要推迟执行的函数或一段代码 注意这里的一段代码要以字符串的形式出现 |
1 | setInterval()用法和setTimeout()完全一致,只是前者会每隔一段时间就执行,也就是无限次的运行 |
1 | clearInterval()和clearTimeout() 取消对象的定时器 |
setTimeout()
1 | /*用户在每次输入文本后,会立刻将字符转换为大写*/ |
1 | /*改变网页元素的背景颜色*/ |
sleep() 函数
1 | function sleep(ms){ |
promise
1 | Promise对象通过自身的状态来控制异步操作,Promise实例共有3种状态 |
1 | /*返回一个实例,5秒后该实例的状态会变为fulfilled*/ |
1 | let promise = new Promise(function(resolve,reject){ |