0

私はQをいじっていて、すぐに、ユーザーに何かを入力するように順番に尋ねようとしています。例えば ​​:

What is your name? Bob
What is your age? 40
Hello Bob (40)! 

(はい! これは単純な "Hello world!" プログラムです。)

Qのgithubプロジェクトページから直接、私が試しているコードは次のとおりです。

Q.fcall(promptly.prompt, "What is your name? ")
.then(promptly.prompt, "What is your age? ")
.done(function(name, age) {            
  console.log("Hello " + name + " (" + age + ")");
});

});

しかし、期待どおりに動作していません (私の読み方が間違っているのでしょうか?)。何を試しても、promptly.promptキーストロークを並行してリッスンしているようで、.done関数がすぐに呼び出され、

/path/to/node_modules/promptly/index.js:80
         fn(null, data);
         ^
TypeError: undefined is not a function
     at /path/to/node_modules/promptly/index.js:80:9
     ...

一度私がヒットEnter。なぜこれがそうしているのか、どうすれば私がやろうとしていることを達成できるのでしょうか?

** 編集 **

基本的に、私の最終目標は、次のように呼び出される再利用可能な関数を作成することです:

promptAll({ 
    'name': "What is your name? ", 
    'age': "What is your age? "
}).done(function(input) {
    console.log(input);  // ex: { name: "Bob", age: 40 }
});

** アップデート **

これが私の実用的なソリューションです。 WiredPrainenfcallの提案に従って使用する必要がありました。

function multiPrompt(args) {
  function _next() {
    if (keys.length) {
      var key = keys.pop();
      Q.nfcall(promptly.prompt, args[key]).done(function(value) {
        result[key] = value;
        _next();
      });
    } else {
      def.resolve(result);
    }
  };
  var def = Q.defer();  
  var keys = _.keys(args).reverse();
  var result = {};

  _next();

  return def.promise;
};

:アンダースコアを使用していますが、標準のオブジェクトイテレータでも同じことができます。)

4

2 に答える 2