2013-11-12 2 views
0

Я просто не могу понять это независимо от того, сколько статей генераторов я читаю ... Я также попытался установить все библиотеки волокон, и ни один из них будут установлены на моей машине, но это нормально, потому что я должен, вероятно, узнать, как работает собственный механизм ES5.Использование генераторов для ожидания ввода до продолжения тела цикла forEach

Это то, что мой код выглядит так далеко ..

var arr = [1, 2, 3]; 

arr.forEach(function(n, i, arr){ 

    var rl = readline.createInterface({ 
     input: process.stdin, 
     output: process.stdout 
    }); 

    rl.question('Enter input [' + [n, i].join(' ') + ']:', function(answer) { 
      arr[i] = { prompt: [n, i], response: answer }; 
      rl.close(); 
    }); 

}); 

Проблема заключается в том, что последовательность, предсказуемо, выглядит следующим образом:

Enter input [1 0]: 
Enter input [2 1]: 
Enter input [3 2]: 

<input> 
<input> 
<input> 

В то время как мне нужно каждый выход, чтобы быть непосредственно за которым следует соответствующий вход. Как это сделать в генераторах и yield?

Спасибо ..

+0

Просто проверяю все, что я вижу, это 'Enter вход [3 2]:' то ввод повторяется три раза. – user568109

ответ

0

Попробуйте это --harmony--use_strict на последнем узле (я примерил v0.11.9):

var readline = require('readline'); 
function* questionaire(arr) { 
    for(var i = 0; i < arr.length; i++) 
    { 
     var n = arr[i]; 
     var rl = readline.createInterface({ 
      input: process.stdin, 
      output: process.stdout 
     }); 
     rl.question('Enter input [' + [n, i].join(' ') + ']:', function(answer) { 
       arr[i] = { prompt: [n, i], response: answer }; 
       rl.close(); 
       console.log(arr); 
       run.next(); 
     }); 
     yield n; 
    } 
} 

let arr = [1, 2, 3]; 
var run = questionaire(arr); 
run.next();