首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用inquirer js初始化类属性?

如何使用inquirer js初始化类属性?
EN

Stack Overflow用户
提问于 2021-05-01 14:29:48
回答 1查看 110关注 0票数 0
代码语言:javascript
复制
class Example {
    constructor(id) {
        this.id = this.getId();
    }
    getId() {
        inquirer
            .prompt({
                message: "Enter id?",
                type: "input",
                name: "employeesId",
            })
            .then((answer) => (this.id = answer.employeesId));
    }
}

const testExample = new Example();
testExample.getId()
console.log(testExample.id); // <-- expected to log the id after user has entered it, instead returns undefined

所以我是OOP的新手,我只是想知道为什么它不能工作,任何帮助都将不胜感激。

一个与解释周围的工作也将受到高度赞赏。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-06-05 04:53:47

调用then()回调需要一段时间。但是当你这样做的时候:

代码语言:javascript
复制
testExample.getId()
console.log(testExample.id);

您不必等待inquirer完成并设置id。现在没有办法等待它,因为getId()是一个void方法。它需要返回一个Promise

最好的方法是使用async/await语法。如果您将getId()设置为async方法,那么这意味着它将返回一个您可以awaitPromise

不可能在构造函数中明确地将id设置为number,因为构造函数不能是异步的。您可以让this.id成为一个解析为numberPromise,也可以让它从undefined开始,然后在inquirer完成后设置为一个数字。

看起来您当前正在接受一个id作为构造函数的参数,但是您没有使用它,所以我不确定这是怎么回事。

使用this.id作为可能的undefined

代码语言:javascript
复制
class Example {
    constructor() {
    }
    async getId() {
        const answer = await inquirer
            .prompt({
                message: "Enter id?",
                type: "input",
                name: "employeesId",
            });
        this.id = answer.employeesId;
    }
}

const testExample = new Example();
await testExample.getId();
console.log(testExample.id);

使用this.id作为Promise

代码语言:javascript
复制
class Example {
    constructor() {
        this.id = this.getId();
    }
    async getId() {
        const answer = await inquirer
            .prompt({
                message: "Enter id?",
                type: "input",
                name: "employeesId",
            });
        return answer.employeesId;
    }
}

const testExample = new Example();
const id = await testExample.id;
console.log(id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67343494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档