为什么这个javascript函数生成器不工作?

时间:2016-06-05 12:32:30

标签: javascript generator

const f = n => new Promise((resolve, reject) => {
    setTimeout(()=>{
        if (n > 2){
            resolve({result: `${n} is higher than 2`});
        } else {
            resolve({error: `${n} is lower than 2`});
        }
    }, 1000);
});
function *m(){
    const {result, error} = yield f(parseInt(process.argv[2]));
    if(error){
        console.log(error);
    } else {
        console.log(result);
    }
}
m();

我使用node.js v6.2,当我执行node file.js 344时,没有结果。 如果我将调试器放在我选择的任何函数中,它在调试模式下就不会停止。

只有在我使用const it = m();提取迭代器时它才会停止但我已经看到上述模式似乎正确的示例。我错过了什么? 谢谢。

1 个答案:

答案 0 :(得分:2)

当你致电m()时,你正在初始化发电机但没有做任何事情。要获得收益,您需要在next()的结果上调用m()

let generator = m()
generator.next().value.then(result => console.log(result)) 

// will log { result: '344 is higher than 2' } to the console

当您致电next时,生成器的执行将恢复,并在遇到yield时暂停。在这种情况下,yield返回一个promise,它将在value结果的next属性中提供。

https://davidwalsh.name/async-generators是关于这个主题的好读物。