2016-04-03 2 views
-2

следующие коды только выходные {} независимо от того, что я делаю для моих функций генератора:nodejs ES6 генератор выдает только {}

//test 1 
function *myFunc(input) { 
    //yield input; 
    return input; 
} 
console.log(myFunc('dafuq happening')); //prints {} 


//test 2 
function *myFunc2() { 
    console.log('wtf?'); 
} 
myFunc2(); //prints {} 

с помощью nodeJS 5,10 на Arch Linux

+0

Возможный дубликат [Что такое генераторы ES6 и как их использовать в node.js?] (Http://stackoverflow.com/q/18842105/1529630) или [Что такое «функция *» в JavaScript?] (http://stackoverflow.com/q/9620586/1529630) – Oriol

ответ

3

Вызов функции возвращают только an instance of Generator , он еще не запускает содержимое функции. Вы должны вызвать next() на экземпляре, чтобы начать вытягивать значения:

//test 1 
function *myFunc(input) { 
    //yield input; 
    return input; 
} 
console.log(myFunc('dafuq happening').next()); 
// prints { value: 'dafuq happening', done: true } 

//test 2 
function *myFunc2() { 
    console.log('wtf?'); 
} 
myFunc2().next(); 
// prints wtf? 
0

Для регулирования потока генератора, я предпочитаю (рекомендуется) использовать Lib co

var co = require('co'); 
 

 
co(myFunc()) 
 
.then(function(result){ 
 
    //Value, returned by generetor, on finish 
 
}) 
 
.catch(function(error){ 
 
    //I recimmend always finish chain by catch. Or you can loose errors 
 
    console.log(error); 
 
})

И помните, что вы должны давать только функцию, обещание, генератор, массив или объект.

Смежные вопросы