繁体   English   中英

在继续forEach循环的主体之前,使用生成器等待输入

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

无论我阅读多少个发电机文章,我都无法弄清楚……我也尝试安装所有光纤库,但它们都不会安装在我的机器上,但这没关系,因为我应该学习如何无论如何,本机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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM