ES6总结--第二部分之generator & async & await

本文深入探讨ES6引入的重要特性,包括新的数据类型Symbol,箭头函数的语法糖,以及异步编程解决方案,如generator和async/await函数。通过具体示例,解析这些特性如何改善JavaScript的开发效率和代码可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6类
	_
----------------------------------------------------------------
数据类型:
	number、string、boolean、Object、undefined、function
	
	新增:Symbol
	用typeof检测出来数据类型:
		symbol

	new Number(12)
	new String()
	new Array()

symbol	使用情况一般

定义:
	let syml = Symbol('aaa');

注意:
	1. Symbol 不能new
	2. Symbol() 返回是一个唯一值
		坊间传说, 做一个key,定义一些唯一或者私有一些东
	3. symbol是一个单独数据类型,就叫 symbol, 基本类型

	4. 如果symbol作为key,用for in循环,出不来

json  ->  for in

---------------------------------------------------------------
箭头函数
	() =>{}

generator函数
	生成器


	解决异步深度嵌套的问题, async

语法:
	function * show(){
		yield
	}
	function* show(){
	}
	function *show(){
	}

	定义:
		function * gen(){
		    yield 'welcome';
		    yield 'to';
		    return '雪兮';
		}
	调用:
		let g1 = gen();
		g1.next();  // {value:'welcome', done:false}
		g1.next();  // {value:'to', done:false}
		g1.next();  // {value:'雪兮', done:true}

	上述调用,手动调用,麻烦

for .. of  自动遍历 generator

	return的东西,它不会遍历

generator不仅可以配合 for ... of ...

还可以:

1. 解构赋值:
	let [a, ...b] = gen();
2. 扩展运算符
	'...'

	console.log(...gen());
3. Array.from()
	console.log(Array.from(gen()));

generator结合 axios数据请求:

-----------------------------------------------
异步: 不连续,上一个操作没有执行完,下一个操作照样开始
同步: 连续执行,上一个操作没有执行完,下一个没法开始

关于异步,解决方案:
	a). 回调函数
	b). 事件监听
	c). 发布/订阅
	d). Promise对象

co....
-----------------------------------------------
ES2017,规定 async

	nodeJs

	读取文件  fs.readFile

	1. promise
	2. genrator
	3. async
--------------------------------------
async function fn(){  //表示异步,这个函数里面有异步任务
	let result = await  xxx	//表示后面结果需要等待
	
}
--------------------------------------
async特点:
	1. await只能放到async函数中
	2. 相比genrator语义化更强
	3. await后面可以是promise对象,也可以数字、字符串、布尔
	4. async函数返回是一个promise对象
	5. 只要await语句后面Promise状态变成 reject, 那么整个async函数会中断执行
--------------------------------------
如何解决async函数中抛出错误,影响后续代码:
	a). 
		try{

		}catch(e){
			
		}
	b). promise本身catch
--------------------------------------		
个人建议大家:
	try{
		let f1 = await readFile('data/a.txt');
		let f3 = await readFile('data/c.txt');
		let f2 = await readFile('data/b.txt');
	}catch(e){}
-------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值