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();
提取迭代器时它才会停止但我已经看到上述模式似乎正确的示例。我错过了什么?
谢谢。
答案 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是关于这个主题的好读物。