高级之路篇十八:setTimeout、Promise、async、await
2019-05-10 20:55
537 查看
setTimeout
setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。
[code]var timerId = setTimeout(func|code, delay) clearTimeout(timerId); timerId = null;
注意点:
1、定时器回调函数的this指向;
2、延迟执行时间受线程影响,时间不可能精确到指定的延迟时间。
3、必须要等到当前脚本的同步任务和“任务队列”中已有的事件,全部处理完以后,才会执行setTimeout指定的任务。
4、0毫秒实际上达不到的。根据HTML5标准,setTimeOut推迟执行的时间,最少是4毫秒。如果小于这个值,会被自动增加到4。这是为了防止多个setTimeout(f,0)语句连续执行,造成性能问题。
5、属于宏任务
Promise
Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。
一个
Promise有以下几种状态:
- pending: 初始状态,既不是成功,也不是失败状态。
- fulfilled: 意味着操作成功完成。
- rejected: 意味着操作失败。
方法:
1、Promise.all()
2、Promise.race()
3、Promise.resolve()
4、Promise.reject()
5、new Promise().then() 、 new Promise().catch() 、 new Promise().finally()
async
定义异步函数,函数执行返回一个Promise对象
当调用一个
async函数时,会返回一个
Promise对象。当这个
async函数返回一个值时,
Promise的 resolve 方法会负责传递这个值;当
async函数抛出异常时,
Promise的 reject 方法也会传递这个异常值。
[code]async function test(val){ return ++val; } //匿名异步函数 var test = async function(val){ return ++val; }
await
用于等待一个Promise
对象。它只能在异步函数 async function
中使用。
[code][return_value] = await expression;
表达式expression
一个 Promise
对象或者任何要等待的值。
返回值return_value
返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
[code]function p(val){ return new Promise(function(reslove, reject){ setTimeout(function(){ reslove(++val); }, 3000) }) } async function test(val){ console.log(new Date().getTime()); val = await p(val); return ++val; } test(3).then(function(val){ console.log(new Date().getTime()); console.log(val) });
async异步函数与promise的区别有优势:
大多数异步函数也可以使用Promises编写为常规函数。但是,在错误处理方面,
asyncfunctions更不容易出错!
相关文章推荐
- 关于async/await、promise和setTimeout执行顺序
- 前端的异步解决方案之Promise和Await-Async
- JavaScript 的 Async\/Await 完胜 Promise 的六
- async/await ,Blurbird Promise,原生Promise学习小结。
- Promise, Generator, async/await的渐进理解
- NodeJS-Promise、await、async异步变同步
- js的async/await与普通的promise和ajax对比
- Callback, Promise和Async/Await的对比
- Async/Await替代Promise的6个理由
- Async/Await替代Promise的6个理由
- Async/Await替代Promise的6个理由
- 理解异步之美:Promise与async await(一)
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
- Promise和Async/Await用法整理
- Promise,同步异步,Async/await
- 理解异步之美:Promise 与 async await(二)
- 前端面试——回调、Promise、Generator和async-await
- 异步编程 -- 使用Promise、Generator、async/await 规避回调地狱
- Promise 、Async/Await的使用
- node-使用promise, generator, async/await 读取文件的方法