其实手动配置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. 和我一起学python

    近来python越来越火,很多人都出了教程,我也来出一个凑凑热闹吧. pycharm激活 http://idea.lanyus.com/ https://blog.csdn.net/u01404481 ...

  2. ClamAV学习【8】——64位Windows7下编译运行实践

    之前用SourceInsight静态分析了ClamAV引擎源码,现在打算开始动态研究下.不过出师不利,一开始就遇到纠结的问题,能力还有待提高. 从官网下了一个VS2005工程的源码包(http://d ...

  3. “全栈2019”Java多线程第十二章:后台线程setDaemon()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. 使用wblockCloneObjects从后台读取dwg文件复制实体到当前数据库

    AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse); if (pNewDb == NULL) { return; } Acad::ErrorSta ...

  5. Java常见错误及解决方案

    1.类定义未找到:java.lang.NoClassDefFoundError java类文件没有上传:上传了,服务器没找到,建议将JSP页面重新更新或重启服务器. 2.

  6. eclipse安装SonarLint插件,sonarLint客户端的使用

    一.在线安装sonarLint 打开eclipse里的help->Eclipse Marketplace,搜索“sonar”关键字,目前sonar的插件是sonarlint,如下图: 点击“In ...

  7. P4842 城市旅行

    题目链接 题意分析 首先存在树上的删边连边操作 所以我们使用\(LCT\)维护 然后考虑怎么维护答案 可以发现 对于一条链 我们编号为\(1,2,3,...,n\) 那么期望就是 \[\frac{a_ ...

  8. leetcode-209-长度最小的子数组

    题目描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums ...

  9. QuantLib 金融计算——随机过程之 Heston 过程

    目录 QuantLib 金融计算--随机过程之 Heston 过程 Heston 过程 参考文献 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之 H ...

  10. git 远程库和url

    我们使用 git remote add origin <url> 来关联远程主机,这个origin就是关联的远程主机名,如果我们想同时关联两个远程主机,我们可以用 git remote a ...