生成器-》详解
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// function* func(){
// console.log('A');
// yield 1;
// console.log('B');
// yield 2;
// console.log('C');
// yield 3;
// console.log('D');
// return 4;
// }
// func.prototype.AA = 10;
// let iterator = func();
// console.log(iterator.next()); // {value: 1, done: false}
// console.log(iterator.next()); // {value: 2, done: false}
// console.log(iterator.next()); // {value: 3, done: false}
// console.log(iterator.next()); // {value: undefined, done: true}
// function* func(){
// let x = yield 1;
// console.log(x);
// }
// let iterator = func();
// iterator.next()
// iterator.next(10)
// function* func1(){
// yield 1;
// yield 2;
// }
// function* func2(){
// yield 3;
// yield* func1();
// yield 4;
// }
// let iterator = func2();
// console.log(iterator.next());
// console.log(iterator.next());
// console.log(iterator.next());
// console.log(iterator.next());
const func = x =>{
return new Promise(resolve=>{
setTimeout(()=>{
resolve(++x);
},1000);
})
}
// 异步串行
// func(0).then(x=>{
// console.log(x);
// return func(x)
// }).then(x=>{
// console.log(x);
// return func(x);
// }).then(x=>{
// console.log(x);
// return func(x);
// })
// (async function(){
// let x = await func(0);
// console.log(x);
// x = await func(x);
// console.log(x);
// x = await func(x);
// console.log(x);
// })()
// function* generator(x){
// x = yield func(x);
// console.log(x); // 1
// x = yield func(x);
// console.log(x); // 2
// x = yield func(x);
// console.log(x); // 3
// }
// let iterator = generator(0);
// let result = iterator.next();
// result.value.then(x => {
// result = iterator.next(x) ;
// result.value.then(x => {
// result = iterator.next(x) ;
// result.value.then(x => {
// iterator.next(x) ;
// });
// });
// });
// 递归实现
function asyncFunc(generator,...params){
const iterator = generator(...params);
const next = x => {
let {value,done} = iterator.next(x);
if(done) return ;
value.then(x => {
next(x);
})
};
next();
}
asyncFunc(function* (x){
x = yield func(x);
console.log(x); // 1
x = yield func(x);
console.log(x); // 2
x = yield func(x);
console.log(x); // 3
},0);
</script>
</body>
</html>
我是Eric,手机号是13522679763

浙公网安备 33010602011771号