前言es6
随着互联网的发展,js的应用愈来愈普遍,地位也愈来愈重要,网站也发生了翻天覆地的变化。
到目前为止,先后台基本完全分离,交互都采用异步的方式,ajax、fetch...ajax
fetchjson
目前大部分互联网公司开发都转向React、Vue,先后台交互也大都使用fetch取代ajax,而咱们知道fetch的实现原理采用了es6中的Promise,Promise把异步请求变得简单优雅,代码示例:异步
fetch(url, {}) .then(response=>{}) .then(res=>{}) .catch(err=>{});
咱们要处理返回结果通常这么写:async
fetch(url, {}) .then(response=>{ return response.json() }) .then(res=>{ // 结果处理 if(res.success){ // somecode... } }) .catch(err=>{});
若是处理逻辑比较多,这么写不直观,能不能这么写呢:fetch
let res = fetch(url, {}); // 结果处理 if(res.success){ // somecode... }
结果固然是能够的,那就是es7中的await网站
await & asyncthis
await 是es7中定义的一个关键字,能够等待Promise返回数据,至关于暂停功能,await字面意思就是等待。
async也是es7中的关键字,字面意思是异步,做用就是声明一个异步方法。url
注意:
一、await不能单独存在,必须和async(异步)关键字一块儿使用。
二、await 后面若是不是一个Promise对象的话,那么不会等待哦!code
代码走一波:
// async写在方法前面 asyncFunc = async ()=>{ console.time(); let res = await (new Promise((resolve, reject)=>{ setTimeout(resolve.bind(this, 10), 2000); })); console.timeEnd(); // default: 2711.656982421875ms 等待Promise执行完毕 console.log( res ); // 10 拿到了Promise的返回结果 } asyncFunc();
await 对普通异步代码无效:
asyncFunc2 = async ()=>{ console.time(); let res = await setTimeout( ()=>{return 10}, 2000); console.timeEnd(); // default: 0.705078125ms, 说明没有等待setTimeout完成 console.log( res ); // 737 setTimeout定时器的返回值 } asyncFunc2();
更多操做本身去实践吧!
扩展
有兴趣的小伙伴能够去研究下 yield 关键字哦, 能够暂停方法的执行,并返回yield 后面的值
喜欢个人文章就点赞转发吧!