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;
};
(注意:我使用的是下划线,但同样可以使用标准对象迭代器来实现。)