我有2个函数:一个生成器函数和一个正常函数(不带*)。生成器功能(示例):
function* generator(i) {
yield i;
yield i + 10;
}
和正常功能:
function normal(param) {
var variable = 1;
// yield generator function
}
我知道无法在普通函数内部产生,但是如何调用生成器?我是否必须使用Promises或类似的东西?如果必须是Promise,那么它应该是什么样子?我试图这样做:
new Promise((resolve) => {
var result = generator(3);
Promise.all(result);
});
但这给我一个错误
反之亦然吗?例如,如果我需要在生成器中调用普通函数?
答案 0 :(得分:1)
您可以使用GeneratorFunction中的next
函数转到下一个yield
语句。
看看文档-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function *
function* generator(i) {
yield i;
yield i + 10;
}
const g = generator(10);
let result = g.next();
while (!result.done) {
console.log(result.value)
result = g.next();
}
答案 1 :(得分:1)
您可以在生成器函数上使用next()
方法,如下所示:
function* generator(i) {
yield i;
yield i + 10;
}
function higherLevel (){
let gen = generator(1).next();
return gen
}
console.log(higherLevel());
这样,您可以在另一个函数中获取yield
的下一个值。
答案 2 :(得分:0)
如果您想全部打印它们,使用 await for
语法更容易,如下所示:
function * generator(i) {
yield i;
yield i + 10;
}
(async function printGenerator() {
for await (const item of generator(3)) {
console.log(item);
}
})();
输出是
3
13