一、前言
在项目中经常遇到处理异步请求的情况,面对层层的嵌套,回调显示那么苍白无力;
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案,既然这样就用上吧。
二、配置编译
网上实践很多。。。
反倒是Promise在实践过程中加了一个polyfill。
三、实践
await后方法要写成peomise的形式,转成异步形式。大概如下,这样异步操作看起来就像同步操作一样明了。
四、测试
(async function(){ let step_1 = await step1(); //异步1 console.log(step_1.result); //同步2 console.log('step2'); //同步2 let step_3 = await step3(); //异步3 console.log(step_3); //同步4 console.log('step4'); //同步4 })().catch(err=>{ console.log(err); }); function step1(){ return new Promise((resolve, reject) => { setTimeout(()=>{ if(1){ resolve({ result:'我是异步step_1返回的数据' }) }else{ reject() } },2000); }) } function step3(){ return new Promise((resolve, reject) => { setTimeout(()=>{ if(1){ resolve('我是异步step_2返回的数据') }else{ reject() } },2000); }) }
五、node v7.5以上原生支持async/await
如果不想更新node,可以使用babel
$ npm install --save-dev babel-cli $ npm install --save-dev babel-preset-es2015 babel-preset-es2017
创建: .babelrc文件
{ "presets": ["es2015","es2017"] }
//执行 babel-node xxx.js