1

下面的非常简单的示例(几乎从 npm 查询器首页复制而来)给出了“.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
4

1 回答 1

2

这可能是因为您有一个旧版本的查询器(0.12.0 或更早版本)不支持承诺(承诺是在 1.0.0 版中添加的)。

您的代码段适用于 6.0.0 和 1.0.0 版本,但在 0.12.0 版本中出现完全相同的错误消息而失败。

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

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

然后做

npm install
于 2018-08-01T20:34:32.913 回答