5、ES6 === 异步 Promise Generator yield

1、Promise

三种状态:
1、Pending: 等待,处理中,然后:
*、Resolve: 完成
*、Rejected: 拒绝,失败

(()=>{
	// 简单理解 Promise
	let p1 = new Promise((resolve, reject)=>{
		if (异步处理成功了) {
			resolve(成功的数据);
		}else{
			reject(失败的原因);
		}
	});

	p1.then(成功(resolve), 失败(reject)).then(...);
})();

(()=>{
	
	let p1 = new Promise((resolve, reject)=>{
		resolve(1);
	});

	p1.then((value)=>{
		console.log('成功了 ==' + value);// 执行: '成功了 ==1'
	}, (err)=>{
		console.log('失败了');// 不执行
	});
})();
(()=>{
	// ...
	let p1 = new Promise((resolve, reject)=>{
		resolve('我是数据');
	});

	p1.then((value)=>{
		return value; // 返回给下一个 then
	}, (err)=>{
		console.log('失败了: ' + err);// 不执行
	}).then((val)=>{
		console.log(val); // 执行:"我是数据"
	}, (err)=>{
		console.log('失败了: ' + err);// 不执行
	});
})();
(()=>{
	// Promise catch方法
	let p1 = new Promise((resolve, reject)=>{
		resolve('我是数据');
	});

	p1.then((value)=>{
		console.log(value); // 我是数据
		throw '发生错误了';
	}).catch((e)=>{
		console.log(e); // 发生错误了
	});
})();
(()=>{
	// Promise all
	let p1 = Promise.resolve(3);

	let p2 = Promise.reject(5);

	// all:只要有一个错误,就报错
	Promise.all([p1, p2]).then((value)=>{
		console.log(value);
	}, (err)=>{
		console.log('错误了: ' + err); // 错误了: 5
	});
})();
(()=>{
	// Promise race
	let p1 = new Promise((resolve, reject)=>{
		setTimeout(resolve, 500, 'one');
	});

	let p2 = new Promise((resolve, reject)=>{
		setTimeout(resolve, 100, 'two');
	});
	
	// race p1,p2谁先执行resolve,就传递谁的数据
	Promise.race([p1, p2]).then((value)=>{
		console.log(value); // two
	});
})();
(()=>{
	// Promise resolve
	let p1 = Promise.resolve(3);
	let p2 = Promise.resolve(p1);

	p2.then((value)=>{
		console.log(value); // 3
	});
})();

2、Generator

生成器 —— 是一个函数,可以遍历


形式上:

a、函数名字前面有 *

b、函数内部使用 yield 语句



(()=>{
	// Generator
	function* show(){
		yield 'Hello';
		yield 'World';
		yield 'Es6';
	}

	var res = show();
	console.log(res.next()); // 结果是:{ value: 'Hello', done: false }
	console.log(res.next()); // 结果是:{ value: 'World', done: false }
	console.log(res.next()); // 结果是:{ value: 'Es6', done: false }
	console.log(res.next()); // 结果是:{ value: undefined, done: true }
})();
(()=>{
	// Generator
	function* show(){
		yield 'Hello';
		yield 'World';
		yield 'Es6';
		return 'xxx';
	}

	var res = show();
	console.log(res.next()); // 结果是:{ value: 'Hello', done: false }
	console.log(res.next()); // 结果是:{ value: 'World', done: false }
	console.log(res.next()); // 结果是:{ value: 'Es6', done: false }
	console.log(res.next()); // 结果是:{ value: 'xxx', done: true }
	console.log(res.next()); // 结果是:{ value: undefined, done: true }
})();
(()=>{
	// Generator
	function* show(){
		// yield语句返回值:undefined
		var a = yield 'Hello';
		return a;
	}

	var res = show();
	console.log(res.next()); // 结果是:{ value: 'Hello', done: false }
	console.log(res.next()); // 结果是:{ value: undefined, done: true }
})();
(()=>{
	// Generator
	function* fn(){
		yield 1;
		yield 2;
		yield 3;
		yield 4;
		yield 5;
		yield 6;
		return 7;
	}

	// for...of 遍历
	for(let v of fn()){
		console.log(v); // 1 2 3 4 5 6
	}
})();
(()=>{
	// Generator
	let json = {
		*show(){
			yield 'a';
			yield 'b';
			return 'c';
		}
	};
	var res = json.show();
	console.log(res.next()); // 结果是:{ value: 'a', done: false }
	console.log(res.next()); // 结果是:{ value: 'b', done: false }
	console.log(res.next()); // 结果是:{ value: 'c', done: true }
})();









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值