一、前言
在项目中经常遇到处理异步请求的情况,面对层层的嵌套,回调显示那么苍白无力;
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