1

nodejsのコマンドラインからの入力を受け入れるための次のコードがあります

for(i=0; i<2;i++)
{
    for(j=0; j<2; j++)
    {
        console.log("Enter data for "+i+"th row and "+j+"th column");
        prompt.get(['var1', 'var2'], function (error, result) {
             console.log("var1 is "+result.var1);
             console.log("var2 is "+result.var2);
        });
    }
}

私は次のように出力を得ています

Enter data for 0th row and 0th column
prompt: var1:  
Enter data for 0th row and 1th column
prompt: var1:  
Enter data for 1th row and 0th column
prompt: var1:
Enter data for 1th row and 1th column
prompt: var1:

ご覧のとおり、フローは最初の iter の var1 と var2 では同期していますが、最初の iter の var2 と 2 番目の iter の var1 の間では同期していません。

最初の iter の var2 と 2 番目の iter の var1 も同期するなど、次の一連の出力が必要です。

Enter data for 0th row and 0th column
prompt: var1:  10
prompt: var2:  100
Enter data for 0th row and 1th column
prompt: var1:  20
prompt: var2:  100
Enter data for 1th row and 0th column
prompt: var1:  30
prompt: var2:  100
Enter data for 1th row and 1th column
prompt: var1:  40
prompt: var2:  100

nodejs でこれを行う方法はありますか?

4

2 に答える 2

1

完全な開示、私は個人的に の作者を知っていfuturesます。

futuresまたはasyncを見てください。個人的には、先物スタイルの方が好きなことがあります。

たとえば、同期 for ループを非同期 for ループに変換するには (非同期を操作するためにprompt.get)、次のようにします。

var forEachAsync = require('forEachAsync');

forEachAsync([0, 1], function (next, _, i) {
    forEachAsync([0, 1], function (next, _, j) {
        console.log("Enter data for "+i+"th row and "+j+"th column");
        prompt.get(['var1', 'var2'], function (error, result) {
            console.log("var1 is "+result.var1);
            console.log("var2 is "+result.var2);
            next();
        });
    }).then(next);
});

の nextはfutures、ループの次の反復の準備ができたときに呼び出すコールバックです。ネストされた非同期の forEach を作成します。内側の forEach が終了すると外側の forEach が続き、プロンプト コールバックが呼び出されると内側の forEach が続きます。

Array.prototype.forEachコールバックのシグネチャは、コールバックが最初のパラメータとして追加されていることを除いて、 のシグネチャと同じです。

編集:

関連はありませんが、printf スタイルの console.log の使用を検討してください。

console.log("Enter data for %dth row and %jth column", i, j);

これはノードでは機能しますが、ブラウザーでは機能しません。

于 2012-11-24T19:30:29.000 に答える
0

Mixus によるこのオンライン ブックで説明されているように、フロー制御の基本を理解し、独自のシリーズ関数を実装できます。Nodejs async の初心者にとっては素晴らしく、役立つことがわかりました。本: http://book.mixu.net/node/single.html 章: 7 制御フロー

于 2013-12-24T02:46:54.207 に答える