Я прочитал статью Дэвида Уолша об использовании генераторов в задачах async (https://davidwalsh.name/async-generators), и я хотел сделать то же самое. Вот мой код:ES6: Использование генератора при асинхронных вызовах
function request(time) {
let rand = Math.random()*10;
console.log(`rand is ${rand}`);
setTimeout(function(rand){
it.next(rand)
}, time);
}
function *main() {
let result1 = yield request(5);
result1 = parseInt(result1);
let result2 = yield request(result1);
console.log(`result1 is ${result1} and result2 is ${result2}`);
}
let it = main();
it.next();
, но в консоли я вижу
rand is 6.367766260304355
rand is 0.3009188563265597
result1 is NaN and result2 is undefined
Насколько я могу видеть, когда скрипт достигает пусть ранд = Math.random() * 10 для первого значения времени сохраненный в rand, но затем он переходит в setTimeout, но не входит в него, но достигает it.next() в конце скрипта, а затем возвращается к внутреннему пространству setTimeout, но на этот раз rand не определен. Почему? Как я могу сохранить значение rand и передать его result1?
Edit: OK, когда я редактировал
function request(time) {
setTimeout(function(){
let rand = Math.random()*10;
console.log(`rand is ${rand}`);
it.next(rand)
}, time);
}
он работает отлично. Кажется, я не могу передать значение setTimeout ... Почему?