NodeJs使用asyncAwait两法
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
NodeJs使用asyncAwait两法的更多相关文章
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- 前端面试送命题(二)-callback,promise,generator,async-await
前言 本篇文章适合前端架构师,或者进阶的前端开发人员:我在面试vmware前端架构师的时候,被问到关于callback,promise,generator,async-await的问题. 首先我们回顾 ...
- 原生JS中 callback,promise,generator,async-await 的简介
callback,promise,generator,async-await 的简介 javascript异步的发展历程. ES6 以前: 回调函数(callback):nodejs express ...
- 回调、Promise、async-await
第一章 异步:现在与将来 程序中现在运行的部分和将来运行的部分之间的关系就是异步编程的核心. 场景:等待用户输入.从数据库或文件系统中请求数据.通过网络 发送数据并等待响应,或者是在以固定时间间隔执行 ...
- Vue学习笔记-nodejs+vue-cli4+webpack按装配置+项目创建
一 使用环境: windows 7 64位操作系统 二 Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nodejs的官网下载 https: ...
- NodeJs之OS
OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...
- NodeJs之Path
Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...
- NodeJs之调试
关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
随机推荐
- centos7 加入自启动服务的方法 以jexus为例
在/lib/systemd/system 下创建文件jexus.service vi jexus.service 内容如下 Unit Description=jexus After=network.t ...
- queen8
八皇后问题 八皇后问题的数学模型:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后问题可 ...
- Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明: Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例 ...
- html 上传预览图片
直接上代码了 <!DOCTYPE html> <html><head lang="en"><meta http-equiv="C ...
- mysql事务处理
事务处理能保证所有的sql操作一次性完成或回滚,mysql默认的MyISAM表类型是不支持事务处理的,如果需要做事务处理,需要把表类型换成InnoDB <?php $dsn='mysql:hos ...
- ECMAScript数组常用
var arr = [22, 33, 44, 55, 66, 77, 88, 99]; //every 全部结果为true 则返回true var e = arr.every(function (m) ...
- 前端静态资源版本更新与缓存之——gulp自动化添加版本号
公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...
- tar 解压常用压缩文件格式命令大全
常用压缩文件格式就那么几种,解压命令总结在此: 1 2 3 4 5 6 7 8 tar xzf filename.tar.gz tar xjf filename.tar.bz2 tar xzf f ...
- VB用windows API激活子窗体
http://files.cnblogs.com/files/liuzhaoyzz/%E6%BF%80%E6%B4%BB%E5%AD%90%E7%AA%97%E4%BD%93.rar setforeg ...
- ubuntu-kylin16.04搭建lamp环境。
首先下载安装apache2 输入:sudo apt-get install apache2 安装完毕后,在浏览器中输入:localhost 显示如下图,说明安装正确. 紧接着安装php7.0 输入:s ...