使用生成器等待输入,然后再继续 forEach 循环的主体

Using generators to wait for input before continuing the body of a forEach loop

本文关键字:再继续 然后 forEach 循环 主体 输入 等待      更新时间:2023-09-26

无论我读了多少生成器文章,我都无法弄清楚这一点......我也尝试安装所有的光纤库,它们都不会安装在我的机器上,但这没关系,因为无论如何,我可能应该学习本机 ES5 机制的工作原理。

这就是到目前为止我的代码的样子。

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中做到这一点?

谢谢。。

在最新节点上用--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();