nodejs记录1——async函数
其实手动配置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函数的更多相关文章
- 初识async函数
为什么会出现async函数 首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个 ...
- nodejs进阶(7)—async异步流程控制
Async介绍 Async是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 m ...
- C# 5.0 Async函数的提示和技巧
一.创建Async函数 Async是C# 5.0中新增的关键字,通过语法糖的形式简化异步编程,它有如下三种方式: async Task<T> MyReturningMethod { ret ...
- async 函数-----------------解决异步操作隧道的亮光
之前也学过,只是没有学好,公司现在用的都是async函数 , 所以决定把它弄懂.最近看了看阮一峰的博客,做下记录. 异步I/O不就是读取一个文件吗,干嘛要搞得这么复杂?异步编程的最高境界,就是根本不用 ...
- 深入浅出ES6教程『async函数』
大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了Symbol & generator的用法,下面我们一起来继续学习async函数: async [ə'zɪŋk]:这个 ...
- async 函数学习笔记
async函数就是Generator函数的语法糖. var fs = require('fs'); var readFile = function (fileName) { return new Pr ...
- async 函数
同步 console.log(1); console.log(2); console.log(3); console.log(4); //异步 ajax 文件读取io操作 console.log(1) ...
- ECMAScript 6 学习(二)async函数
1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...
- ES2017中的async函数
前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...
随机推荐
- iOS 优秀开源项目
1. 界面 iCarousel: 用来做图片旋转显示效果(相册). MZTimerLabel:用来制作一个计时并显示时间的 label. MSDynamicsDrawerViewController, ...
- C语言的第零次作业
C语言--第0次作业 Q1:对于网络专业的了解 一开始我对网络工程这个专业并不是很了解,在报志愿之前,我完全没想过自己会进这个专业,但是经过了一个暑假的时间,我慢慢地开始了解这个学科,并开始对这个专业 ...
- C语言—第二次作业
1.本章学习内容 1.1思维导图 1.2本章学习体会即代码量学习体会 1.2.1学习体会 在本章中对循环的内容进行了加深训练,学习了一种解决问题的方法循环嵌套,也学到了伪代码的运用,在描述算法是运用伪 ...
- unix网络编程卷2:进程间通信
管道没有名字,只能有亲缘关系使用. FIFO也叫有名管道,有名所以没有了这个限制. 管道提供一个单向数据流,创建函数返回两个文件描述符.一个用来读,一个用来写. 宏S_ISFIFO可用于确定一个描述符 ...
- tushare模块的应用
一.简介以及环境安装 TuShare是一个著名的免费.开源的python财经数据接口包.其官网主页为:TuShare -财经数据接口包.该接口包如今提供了大量的金融数据,涵盖了股票.基本面.宏观.新闻 ...
- robot framework-tags(标签)实例
robot framework的标签是一个简单而又强大的分类机制,功能如下: 标签在reports,logs以及测试数据中展示,显示关于测试用例的元数据信息 用例的执行统计(total,passed, ...
- OWASP JUICE SHOP部分题解
本文作者:S0u1 0×00 简介 OWASP JUICE SHOP是一个开源的web应用靶场,里面包含了共记47个漏洞挑战任务,囊括了OWASP TOP 10的各个点,是一个很不错的渗透测试练手项目 ...
- 我把阿里云centos gcc从4.4.7升级到4.8.2的经历
我有试着去手动编译安装gcc,可是make的速度实在太慢,最后还直接失败了. 最后在csdn找到了个博客,说是使用yum来安装,网址为: http://blog.csdn.net/ppdouble/a ...
- 酱油 Noip2018颓废记
也不知道写一些什么了 凑和着写写吧 最近十分的¥#&(^ --#%!*%¥^#$# Day -1 上午考了一场试 就\(TM\)考了60分 好不容易积攒起来的信心啊~~~~~~ 就这么垮了~~ ...
- POJ 2234
#include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 100 using na ...