async/await使用同步的方式来书写异步代码,将异步调用的难度降低到接近于0,未来必将大放异彩。然而在当下,由于标准化的缓存步伐,async/await尚在ES7的草案中。为了尝先,特试用了下面两种方式:

  • 使用社区提供的asyncawait封装
  • 使用ES7草案

使用社区提供的asyncawait模块

Git地址

git@github.com:yortus/asyncawait.git

使用方法:

1.       安装node模块

a)         npm install asyncawait@1.0.3 –save

2.       创建示例类AsyncService.js

var async = require('asyncawait/async');
var await = require('asyncawait/await');
var sleep = async(
    function sleep(timeout) {
        return new Promise(function (resolve, reject) {
            setTimeout(function () {
                resolve();
            }, timeout);
        });
    }
);

(async(
    function () {
        console.log('Do some thing, ' + new Date());
        await(sleep(3000));
        console.log('Do other things, ' + new Date());
    }
))();

3.       运行AsyncService.js

a)         node AsyncService.js

b)         运行结果:

Do some thing, Wed Jun 15 2016 11:09:05 GMT+0800 (中国标准时间)

Do other things, Wed Jun 15 2016 11:09:08 GMT+0800 (中国标准时间)

注意事项

1.       asyncawait模块内部引用bluebird模块.

2.       无须编译为Es5,可直接运行.

使用ES7草案

使用方法:

1.       安装node模块,需要的一系列模块如下:

a)    babel-cli
b)    babel-preset-es2015"
c)    babel-preset-react":
d)    babel-preset-stage-3
e)    babel-polyfill

2.       创建示例类 AsyncAwaitService.js

async function sleep(timeout) {
    return new Promise((resolve, reject) => {
        setTimeout(function () {
            resolve();
        }, timeout);
    });
} (async function () {
    console.log('Do some thing, ' + new Date());
    await sleep(3000);
    console.log('Do other things, ' + new Date());
})();

3.       编译AsyncAwaitService.js

a)         配置babel

i.              在package.json中加入babel节点,内容如下:

"babel": {
 "presets": [
    "es2015",
    "react",
    "stage-3"
 
],
 "plugins": []
}

b)         编译

babel AsyncAwaitService.js --out-file AsyncAwaitService_es5.js
或者
babel AsyncAwaitService.js -o AsyncAwaitService_es5.js

c)         标记编译后的代码

     在AsyncAwaitService_es5.js脚本头部加入以下代码:
require('babel-polyfill')

4.       运行AsyncAwaitService_es5.js

a)         node AsyncAwaitService_es5.js

b)         运行结果:

Do some thing, Wed Jun 15 2016 11:54:13 GMT+0800 (中国标准时间)

Do other things, Wed Jun 15 2016 11:54:16 GMT+0800 (中国标准时间)

注意事项

1.       async/await通过babel编译为Es5,方可直接运行.

2.       babel编译相关内容可参考阮一峰博客 http://www.ruanyifeng.com/blog/2016/01/babel.html

最新文章

  1. [C#] 获取打印机列表
  2. inline-block 空白间距问题
  3. Oracle数据库学习笔记
  4. sql 中实现往表中插入一条记录并返回当前记录的ID
  5. c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]
  6. Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
  7. 网站开发常用jQuery插件总结(11)折叠插件Akordeon
  8. 图片ppm编码格式
  9. SPOJ 375(树链剖分)
  10. LeetCode Solutions : Reorder List
  11. JavaScript :memory leak [转]
  12. Struts的前世今身
  13. 每天一个linux命令(56)--crontab命令
  14. Swift中枚举的总结以及使用
  15. String的Intern方法详解
  16. 解决无线网络连接出现黄色感叹号---win10
  17. [CQOI2013]新Nim游戏
  18. java并发之读写锁ReentrantReadWriteLock的使用
  19. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析小结
  20. This InfoPath form template is browser-compatible, but it cannot be browser-enabled on the selected site

热门文章

  1. 纯硬盘安装Kali 无需U盘
  2. jq
  3. JavaScript 的 defer 与 async
  4. 如何为CriteriaOperator过滤对象转换为lambda表达式,即:linq to xpo的动态where语句
  5. k近邻
  6. iOS app 企业内部发布及HTTPS服务器配置
  7. 建立eureka服务和客户端(客户端获取已经注册服务)
  8. PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第四组(转)
  9. nodejs的第四天学习笔记
  10. iOS多线程