大家要是不知道es6生成器可以看看我的上一篇博客
现在有个场景,假设需要异步操作,1s后输出111,2s后输出222,3s后输出333,你会怎么做?
setTimeout?这个很不错,但是要是很多嵌套的话会导致一些麻烦事情,修改也不好修改,我们称之为回调地狱
setTimeout(() => {
console.log("回调地狱,太麻烦了");
setTimeout(() => {
console.log("很多回调函数镶嵌的话就会像地狱一般");
}, 2000);
}, 1000);
而且其还不是正常的异步数据
首先第一步,就是设定各个函数的settimeout函数
//如何用异步的生成器函数实现呢
function one(){
setTimeout(() => {
let data='用户型数据';
console.log(111);
iterator.next(data);//将数据传到下一个回调函数里面
}, 1000);
}
function two() {
setTimeout(() => {
let data='订单型型数据';
console.log(222);
iterator.next(data);
}, 2000);
}
function three() {
setTimeout(() => {
let data='商品型数据';
console.log(333);
iterator.next(data);
}, 3000);
}
到这里,再在es6的生成器函数里面调进去
function *gen(){
const aa= yield one();
console.log(aa);//得到回调行数的数据输出来
const bb=yield two();
console.log(bb);
const cc=yield three();
console.log(cc);
}
//调用
let iterator=gen();
iterator.next();
这阵子就实现了