2015-07-04 2 views
0

Не уверен, если это мой ES6 неопытности что-то неправильно с помощью Бабеля, но я пытаюсь создать своего рода асинхронный, если ... тоГенераторы и столпотворение-узел

var token = 6; 

var f1 = function*() { 
    if (token > 5) { 
     getToken(); 
     token = yield; 
    } 
    console.log(token); 
}; 

var getToken = function() { 
    for (i=0; i<10000000; i++) { 
     var x = i*2; 
    } 
    f1(0); 
}; 

f1(); 

который я тогда бежать от его файл с

babel-node generator.es6.js 

Я ожидаю 0, но я не получаю ничего.

+0

WTH - это тот цикл, который должен там делать? Это 'sleep()'? – Bergi

+0

Да. Что-то, что отправляется в Интернет, прежде чем возвращать значение –

+0

Ну, что-то вроде этого * асинхронно * и должно быть смоделировано с использованием тайм-аута, а не продолжительного цикла. – Bergi

ответ

1

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

function* f() { 
    var token = 6; 
    if (token > 5) { 
     getToken(); 
     token = yield; 
    } 
    console.log(token); 
}; 

function getToken() { 
    setTimeout(function() { 
     f1.next(0); // advance generator 
    }, 100); 
}; 

var f1 = f(); // create generator 
f1.next(); // start generator 

Обратите внимание, что продвижение генератора должно быть сделано в асинхронном режиме, называя его непосредственно из getToken привели бы в TypeError от f1.next() пока f1 все еще выполнял. Сначала необходимо выполнить заявление yield.

+0

Спасибо - ваш комментарий о том, как запустить генератор, - это то, что я бы тоже не разработал сразу, поэтому спасибо –

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