nodejs Api和ECMAScript新特性
ES7新特性:Async Functions (异步函数):
异步是什么
无法立即获得执行结果,满足某种条件的时候才执行
JS中的异步操作:1、定时器都是异步操作2、事件监听(事件绑定)都是异步操作3、AJAX中一般我们都采取异步操作(也可以同步)4、回调函数可以理解为异步(不是严谨的异步操作)剩下的都是同步处理
示例: for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i);
}, 0);
};
异步的好处
Javascript语言的执行环境是"单线程"(single thread)。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。
- 异步函数声明:
async function foo() {}
- 异步函数表达式:
const foo = async function () {};
- 异步函数定义:
let obj = { async foo() {} }
- 异步箭头函数:
const foo = async () => {};
async(异步) 函数总是返回 Promises,Promise对象必须实现then方法,then是promise规范的核心,而且then方法也必须返回一个Promise对象,同一个Promise对象可以注册多个then方法,并且回调的执行顺序跟它们的注册顺序一致;
Promise对象:Promise是异步编程的一种解决方案
//定义一个Promise对象玩玩
var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); });
参考技术文档:
对js Promise理解:https://blog.csdn.net/qq_29849641/article/details/54970328
es6学习笔记10--箭头函数:https://www.cnblogs.com/huansky/p/5684867.html
nodejs之async异步编程:http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb
ES2017 新特性:Async Functions (异步函数):http://www.css88.com/archives/7731
浅谈ES6的Promise对象:https://www.jianshu.com/p/c98eb98bd00c
彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇):https://www.cnblogs.com/malingyang/p/6535805.html
大白话讲解Promise(一):https://www.cnblogs.com/lvdabao/p/es6-promise-1.html
Javascript异步编程的4种方法:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html?bsh_bid=1736591883