生成器函数通过function*定义,使用yield暂停执行,调用后返回生成器对象,其next()方法控制执行并返回{value, done}对象;1. next()启动或恢复执行,每次遇到yield时暂停并返回值;2. 第二次及之后的next(arg)可向yield传参,作为上一个yield表达式的返回值;3. return()强制结束生成器,后续调用均返回{value: undefined, done: true};4. throw()向生成器抛出异常,可在内部捕获;5. 生成器常用于异步流程控制,配合Promise实现类似async/await的效果。

在 JavaScript 中,生成器(Generator)是一种特殊函数,能够暂停执行并返回中间结果。它通过 *function 定义,并使用 yield 暂停。调用生成器函数后会返回一个生成器对象,该对象具有 next() 方法,用于控制函数的执行流程。
每次调用 next() 时,生成器会从上次暂停的位置继续执行,直到遇到下一个 yield 或函数结束。
next() 返回一个对象,包含两个属性:
function* simpleGen() {
yield '第一项';
yield '第二项';
return '结束';
}
const gen = simpleGen();
console.log(gen.next()); // { value: '第一项', done: false }
console.log(gen.next()); // { value: '第二项', done: false }
console.log(gen.next()); // { value: '结束', done: true }
next() 可以接收参数,这个参数会作为上一个 yield 表达式的返回值。
注意:第一次调用 next() 时传参无效(因为没有前一个 yield),通常第一次调用不传参。
function* genWithInput() {
const input1 = yield '等待输入1';
const input2 = yield 收到:${input1};
return 最终:${input2};
}
const g = genWithInput();
console.log(g.next()); // { value: '等待输入1', done: false }
console.log(g.next('A')); // { value: '收到:A', done: false }
console.log(g.next('B')); // { value: '最终:B', done: true }
生成器常用于简化异步操作,配合 Promise 使用,实现类似 async/await 的效果。
虽然现代开发更多使用 async/await,但理解这种模式有助于深入掌握 JS 异步机制。
function* asyncGen() {
const user = yield fetch('/user');
const posts = yield fetch(/posts?uid=${user.id});
return posts;
}
上面代码中,next() 配合外部执行器可逐步解析每个异步请求。
除了 next(),生成器还支持 throw() 和 return() 方法。
调用 return() 会强制让生成器进入完成状态,后续 next() 均返回 { value: undefined, done: true }。
throw() 可向生成器注入错误,可在函数内用 try/catch 捕获。
基本上就这些。next() 是驱动生成器运行的核心方法,掌握其行为对理解生成器机制至关重要。
以上就是js生成器中next的使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号