87,993
社区成员
发帖
与我相关
我的任务
分享
function step1(){
for(let n=0;n<1000000000;n++){}
return;
}
function* Foo() {
console.log("111111111111")
yield step1();
console.log("333333333333")
}
var foo = Foo();
foo.next();
foo.next();
console.log("2222222222222");
//yield语句后面的表达式或函数,将在阻断之前执行完毕。
//他是异步解决的一个方案 但不是异步执行 这话如何理解呢???
//就是多次next中间可以执行别的代码 而generator中的代码一直停留在上次执行的地方
//再次next的时候接着上次代码的部分继续执行
function step1(){
console.log('222222:A执行一半,假设IO读取文件');
return 'a';
}
function step2(){
console.log('555555:A恢复执行,处理文件');
return 'b';
}
function* Foo() {
console.log("111111:A准备开始执行")
yield step1();//读取文件
console.log("444444:B交还执行权")
yield step2();//处理文件
}
var foo = Foo();
foo.next();
console.log("333333:B获取了执行权");
foo.next();
//console.log("2222222222222");//此时的上下文刚刚执行到这里
var foo = Foo();
foo.next(); //此时打印111,Foo()中执行到了这一步,之后Foo中你可以理解为存了一个标记位
foo.next(); //此时打印333,继续执行Foo()中标记位后续的代码,如果不调用next,标记位置保持不变
console.log("2222222222222");//此时的上下文刚刚执行到这里
function step1(){
for(let n=0;n<100;n++){}
return;
}
function* Foo() {
console.log("111111111111")
yield step1();
console.log("333333333333")
}
var foo = Foo();
foo.next();
console.log("2222222222222");
foo.next();
你就把他看做return yield完之后直到下一次next才会执行之后的代码
没执行一次yied暂停执行之后的代码 中间你可以执行其他代码 再次next的时候接着上次执行的地方往下执行