关于ES7中的async/await在客户端和服务端上的实践

一、前言

在项目中经常遇到处理异步请求的情况,面对层层的嵌套,回调显示那么苍白无力;

async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案,既然这样就用上吧。

二、配置编译

网上实践很多。。。

反倒是Promise在实践过程中加了一个polyfill。

关于ES7中的async/await在客户端和服务端上的实践

三、实践

await后方法要写成peomise的形式,转成异步形式。大概如下,这样异步操作看起来就像同步操作一样明了。

关于ES7中的async/await在客户端和服务端上的实践

四、测试

(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);
      })
    }

 

 关于ES7中的async/await在客户端和服务端上的实践

五、node v7.5以上原生支持async/await

关于ES7中的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

  

 

  

上一篇:sqoop简单import使用


下一篇:MVVM -- CallMethodAction 和 InvokeCommandAction