其实手动配置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. API接口安全加强设计方法

    前面两篇相关文章: <Web Api 内部数据思考 和 利用http缓存优化 Api> <Web Api 端点设计 与 Oauth> 1.开放的接口 这样的接口我们天天都在接触 ...

  2. 【12c OCP】最新CUUG OCP-071考试题库(49题)

    49.(11-1) choose the best answer Examine the structure of the SHIPMENTS table: You want to generate ...

  3. 第三天,爬取伯乐在线文章代码,编写items.py,保存数据到本地json文件中

        一. 爬取http://blog.jobbole.com/all-posts/中的所有文章     1. 编写jobbole.py简单代码 import scrapy from scrapy. ...

  4. pandas.concat连接dataframe

    https://blog.csdn.net/stevenkwong/article/details/52528616

  5. iOS --UIScrollView的学习(二)

    1.接着上一次的说:http://www.cnblogs.com/fengzhihao/p/5287734.html,这次讲一下UISCrollView的缩放功能. 2.当用户在UIScrollVie ...

  6. java_I/O字符流

    I/O流(Stream) INPUT:输入流,从文件里读OUPUT:输出流,写内容到文件 IO流分为:字符流和字节流 字符流:处理纯文本文件. 字节流:处理可以所有文件. 字符输出流测试: @Test ...

  7. net 反编译神器

    文章地址:https://www.cnblogs.com/sheng-jie/p/10168411.html dnSpy官网下载  分享链接 .net core源码导航 https://www.cnb ...

  8. 遇见Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)

    学习过程中难免遇到问题,今天就遇到了Navicat 2003-can't connect to MYSQL server on 'localhost'(10061),navicat报错,我就纳闷以前都 ...

  9. CF1007D. Ants(树链剖分+线段树+2-SAT及前缀优化建图)

    题目链接 https://codeforces.com/problemset/problem/1007/D 题解 其实这道题本身还是挺简单的,这里只是记录一下 2-SAT 的前缀优化建图的相关内容. ...

  10. Smarty <= 3.1.32 Remote Code execution(CVE-2017-1000480)

    Smarty介绍   smarty是一个php模板引擎,其项目地址:https://github.com/smarty-php/smarty 测试环境搭建   下载:https://github.co ...