其实手动配置babel环境并不难,记录下步骤:

1、首先npm init创建一个nodejs项目

2、全局安装babel-cli处理工具:npm i babel-cli -g

3、cd到项目下安装babel依赖:npm i babel-preset-es2015 babel-preset-stage-3 --save-dev,这俩包主要是处理es6转码需要使用的

4、配置.babelrc文件:

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

5、编写我们的测试代码:

var sleep = function(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(`the program stopped ${time}ms`);
}, time);
});
}
var start = async function() {
console.log("start");
var sleeptime = await sleep(3000);
console.log(sleeptime);
console.log("end");
} start();

6、cmd窗口执行:babel-node index.js,说明下:babel-node命令会可以理解为开启了一个新的node环境,该环境下es6代码被支持,当然,你也可以使用其它babel命令,比如:babel index.js -o index.compile.js,然后再执行node index.compile.js即可实现相同效果,关于babel详细介绍可以参考官网使用说明及参数说明。如下是输出打印:

start
the program stopped 3000ms
end

再来看一个例子,是在async函数中使用for循环调用async函数,直接贴代码了:

var sleep = function(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(`the program stopped ${time}ms`);
}, time);
});
} var start = async function() {
console.log("start");
var sleeptime = await sleep(3000);
console.log(sleeptime);
console.log("end");
} // start(3000); var sleep2 = function(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject("error accured!");
}, time);
});
} var start2 = async function() {
try {
console.log("start");
var sleeptime = await sleep2(3000);
console.log(sleeptime);
console.log("end");
} catch (e) {
console.log(e);
}
} // start2(3000); /*async函数的上下文 */
var asyncForFunc = async function(time) {
for (var i = 0; i < 10; i++) {
console.log(`当前开始的是是第${i+1}次循环`);
var time2 = await sleep(time);
console.log(`当前是第${i+1}次输出:${time2}`);
}
} asyncForFunc(1000);

程序正确输出:

循环输出如果改成forEach的话就会直接报错,因为forEach函数改变了await的上下文:await必须出现在async函数中,而forEach非async函数。

额外记录一些东西,那就是nodejs中测试用例的编写:

主要使用的npm包:mocha(测试工具)、should(断言工具)、istanbul(case覆盖率测试工具),如下是待测试的代码:

var fibonacci = function(n) {
if (typeof n != "number") {
throw new Error("n should be a number");
}
if (n < 0) {
throw new Error("n should >= 0");
}
if (n <= 1) {
return n;
}
if (n > 10) {
throw new Error("n should <= 10");
}
return fibonacci(n - 1) + fibonacci(n - 2);
} if (require.main == module) {
//如果是直接执行main,则进入此处
//如果是被其他js引入,则此处不会执行
var n = Number(process.argv[2]);
console.log(`fibonacci(${n}) is ${fibonacci(n)}`);
} exports.fibonacci = fibonacci;

接下来我们编写测试用例,新建文件夹test,并main.test.js文件:

var main = require("../main");
var should = require("should"); describe("test/main.test.js", function() {
it("should equal 55 when n === 10", function() {
// done(); //done可以传一个err参数,err不为空时直接中断后续操作,空时不中断
main.fibonacci(10).should.equal(55);
});
it("should equal 0 when n === 0", function() {
main.fibonacci(0).should.equal(0);
});
it("should equal 1 when n === 1", function() {
main.fibonacci(1).should.equal(1);
});
it("should throw when n > 10", function() {
(function() {
main.fibonacci(11);
}).should.throw("n should <= 10");
});
it("should throw when n < 0", function() {
(function() {
main.fibonacci(-1);
}).should.throw("n should >= 0");
});
it("should throw when n isnt number", function() {
(function() {
main.fibonacci('hehe');
}).should.throw("n should be a number");
});
});

然后再在根目录输入命令mocha进行测试,可能会有如下输出,分别表示测试不通过与通过示例:

测试不通过:

测试通过:

使用istanbul主要是进行代码覆盖率测试,详细介绍可以参考阮老师的文章

在当前项目根目录下执行命令:istanbul cover _mocha 即可,看下输出如下:

这里罗列出了语句覆盖率测试、分支覆盖率测试、函数覆盖率以及行覆盖率测试的结果,over。。。

nodejs记录1——async函数的更多相关文章

  1. 初识async函数

    为什么会出现async函数 首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个 ...

  2. nodejs进阶(7)—async异步流程控制

    Async介绍 Async是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 m ...

  3. C# 5.0 Async函数的提示和技巧

    一.创建Async函数 Async是C# 5.0中新增的关键字,通过语法糖的形式简化异步编程,它有如下三种方式: async Task<T> MyReturningMethod { ret ...

  4. async 函数-----------------解决异步操作隧道的亮光

    之前也学过,只是没有学好,公司现在用的都是async函数 , 所以决定把它弄懂.最近看了看阮一峰的博客,做下记录. 异步I/O不就是读取一个文件吗,干嘛要搞得这么复杂?异步编程的最高境界,就是根本不用 ...

  5. 深入浅出ES6教程『async函数』

    大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Symbol & generator的用法,下面我们一起来继续学习async函数: async [ə'zɪŋk]:这个 ...

  6. async 函数学习笔记

    async函数就是Generator函数的语法糖. var fs = require('fs'); var readFile = function (fileName) { return new Pr ...

  7. async 函数

    同步 console.log(1); console.log(2); console.log(3); console.log(4); //异步 ajax 文件读取io操作 console.log(1) ...

  8. ECMAScript 6 学习(二)async函数

     1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...

  9. ES2017中的async函数

    前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...

随机推荐

  1. util.Date转化成sql.date格式

    https://www.cnblogs.com/zhaotiancheng/p/6413067.html

  2. python--深浅拷贝 join() 列表和字典的删除 fromkeys建立字典

    北京的冬天雾霾依旧很重,依稀记得人生初见雾霾时的样子,那时的回忆也是有些尴尬,不过雾霾也伴随了我的成长,成为了我肺泡中不可分割的一部分. 今天我想写的是拷贝的问题,不过在这之前我想先补充一点关于字符串 ...

  3. 1305 Pairwise Sum and Divide(数学 ,规律)

    HackerRank   1305 Pairwise Sum and Divide   有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:   fun(A)     sum = ...

  4. A - 最少拦截系统 (最长上升子序列)

    点击打开链接 A - 最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度. ...

  5. 【12c OCP】CUUG OCP认证071考试原题解析(33)

    33.choose the best answer View the Exhibit and examine the structure of the ORDER_ITEMS table. Exami ...

  6. 3分钟解决MySQL 1032 主从错误(转)

    转自  https://blog.51cto.com/suifu/1845457 3分钟解决MySQL 1032主从错误 Part1:写在最前 1032错误----现在生产库中好多数据,在从库误删了, ...

  7. linux中python配置tab=4个空格,并显示行号。

    vim ~/.vimrc 写入: set ts=4 set nu :wq 保存. source ~/.vimrc 使之生效.

  8. Python元类编程

    来源:http://python.jobbole.com/88582/ @property装饰器,是将类中的函数当做属性调用 Python类中定义的属性,如果属性名前面只有一个下划线,那么就是一种规范 ...

  9. Springboot第五篇:结合myBatis进行SQL操作

    前提:和之前同样的,本篇会从前端和后台一起讲述关于SQL的select操作(其他操作原理大致类似,不多做解释了). 大致流程:前端通过AJAX将数据发送到后台的路由,后台路由会根据发送的数据进行SQL ...

  10. P1091 合唱队列

    合唱队列 原题:传送门 核心代码: /* 方法求出每一个点的最长升子序列和最长降子序列,再加到该点上 通过循环比较哪个点最大,再用总长减去该点长度即是答案 */ #include<iostrea ...