来自一个非常简单的查询程序的“.then 不是一个函数”

".then is not a function" from a very simple inquirer program

下面这个非常简单的例子(几乎是从 npm inquirer 的首页上复制过来的)给出了“.then 不是一个函数”的错误。但是我无法弄清楚问题是什么。

var inquirer = require('inquirer');

inquirer.prompt([
        {
            name: 'my_name',
            type: 'input',
            message: 'What is your name: '
        }]).then(answers => {
                    console.log("Your name is:"+answers.my_name)            
                    });

错误消息如下所示:

? What is your name:

/home/peter/Documents/nodejs.d/vscode_examples_workspace/security/inq.js:8
        }]).then(answers => {
            ^

TypeError: inquirer.prompt(...).then is not a function
    at Object.<anonymous> (/home/peter/Documents/nodejs.d/vscode_examples_workspace/security/inq.js:8:13)
    at Module._compile (internal/modules/cjs/loader.js:654:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Module.load (internal/modules/cjs/loader.js:566:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
    at Function.Module._load (internal/modules/cjs/loader.js:498:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
    at startup (internal/bootstrap/node.js:201:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)

但是下面的例子可以正常工作。所以基本的node.js环境(nodejs --version=v9.11.2)就OK了。

var inquirer = require('inquirer');

let q = [
    {
        name: 'my_name',
        type: 'input',
        message: 'What is your name: '
    }];

inquirer.prompt (q, function (answers){
    console.log("Your name is: "+answers.my_name);
});

// Output
$ nodejs inq.js
? What is your name:  Peter
Your name is: Peter

这可能是因为您使用的是不支持 promises 的旧版本查询器(0.12.0 或更早版本)(promises 是在 1.0.0 版本中添加的)。

您的代码片段在 6.0.0 和 1.0.0 版中运行良好,但在 0.12.0 版中出现完全相同的错误消息。

检查packages.json您的版本并更新它:

"dependencies": {
  "inquirer": "^6.0.0"
}

然后做

npm install