JS 研究生成器时遇到的问题

oLuoFeng12 2018-08-01 05:39:15
function run(gen) {
var args = [].slice.call( arguments, 1), it; //这个arguments在run(生成器)运行时是什么,变量args怎么获得是空数组

// 在当前的上下文环境中初始化generator
it = gen.apply( this, args );

// 为generator的完成返回一个promise
return Promise.resolve()
.then( function handleNext(value){
// 运行至下一个让出的值
var next = it.next( value );

return (function handleResult(next){
// generator已经完成运行了?
if (next.done) {
return next.value;
}
// 否则继续执行
else {
return Promise.resolve( next.value )
.then(
// 在成功的情况下继续异步循环,将解析的值送回generator
handleNext,

// 如果`value`是一个拒绝的promise,就将错误传播回generator自己的错误处理g
function handleErr(err) {
return Promise.resolve(
it.throw( err )
)
.then( handleResult );
}
);
}
})(next);
} );
}


针对以上问题,大神帮忙回答下,谢谢。
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oLuoFeng12 2018-08-24
  • 打赏
  • 举报
回复
多谢谢2位的指导,看了2位推荐内容收获破丰,感谢你们的指导!!!
forwardNow 2018-08-10
  • 打赏
  • 举报
回复
目测,楼主应该在学习 ES6 的 Promise 、迭代器、生成器。

你想搞明白以下代码


var args = [].slice.call( arguments, 1), it;
// 在当前的上下文环境中初始化generator
it = gen.apply( this, args );


可以看 《深入理解ES6》 第三章 函数 => 剩余参数
oLuoFeng12 2018-08-03
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
[quote=引用 2 楼 oLuoFeng12 的回复:]
[quote=引用 1 楼 jslang 的回复:]
arguments是函数在调用传递的所有参数的集合

function run() {
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
run("a","b","c")


增加如下代码
//这是一个函数生成器
function* main() {
//...
};
//该调用会自动异步运行直到结束
run(main); 此时变量args会是什么呢?[/quote]
args = [].slice.call( arguments, 1) 的作用是用arguments集合中第一个元素之后的元素返回一个新的数组。
如arguments为【"a","b","c"】,则args = ["b","c"]

你 run(main); 就传了一个参数。args当然是空数组了
[/quote]

请问这以下两行的作用是什么,研究这个函数时,这两句不太理解
var args = [].slice.call( arguments, 1), it;
// 在当前的上下文环境中初始化generator
it = gen.apply( this, args );
天际的海浪 2018-08-03
  • 打赏
  • 举报
回复
引用 4 楼 oLuoFeng12 的回复:
[quote=引用 3 楼 jslang 的回复:]
[quote=引用 2 楼 oLuoFeng12 的回复:]
[quote=引用 1 楼 jslang 的回复:]
arguments是函数在调用传递的所有参数的集合

function run() {
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
run("a","b","c")


增加如下代码
//这是一个函数生成器
function* main() {
//...
};
//该调用会自动异步运行直到结束
run(main); 此时变量args会是什么呢?[/quote]
args = [].slice.call( arguments, 1) 的作用是用arguments集合中第一个元素之后的元素返回一个新的数组。
如arguments为【"a","b","c"】,则args = ["b","c"]

你 run(main); 就传了一个参数。args当然是空数组了
[/quote]

请问这以下两行的作用是什么,研究这个函数时,这两句不太理解
var args = [].slice.call( arguments, 1), it;
// 在当前的上下文环境中初始化generator
it = gen.apply( this, args );
[/quote]

https://blog.csdn.net/ganyingxie123456/article/details/70855586
https://www.jianshu.com/p/00dc4ad9b83f
天际的海浪 2018-08-01
  • 打赏
  • 举报
回复
引用 2 楼 oLuoFeng12 的回复:
[quote=引用 1 楼 jslang 的回复:]
arguments是函数在调用传递的所有参数的集合

function run() {
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
run("a","b","c")


增加如下代码
//这是一个函数生成器
function* main() {
//...
};
//该调用会自动异步运行直到结束
run(main); 此时变量args会是什么呢?[/quote]
args = [].slice.call( arguments, 1) 的作用是用arguments集合中第一个元素之后的元素返回一个新的数组。
如arguments为【"a","b","c"】,则args = ["b","c"]

你 run(main); 就传了一个参数。args当然是空数组了
oLuoFeng12 2018-08-01
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
arguments是函数在调用传递的所有参数的集合

function run() {
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
run("a","b","c")


增加如下代码
//这是一个函数生成器
function* main() {
//...
};
//该调用会自动异步运行直到结束
run(main); 此时变量args会是什么呢?
天际的海浪 2018-08-01
  • 打赏
  • 举报
回复
arguments是函数在调用传递的所有参数的集合

function run() {
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
run("a","b","c")

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧