0
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 的新手,只是想了解为什么这不起作用,任何帮助将不胜感激。

也将高度赞赏与解释的工作。

提前致谢。

4

1 回答 1

0

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

testExample.getId()
console.log(testExample.id);

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

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

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

看起来您当前正在接受 aid作为构造函数的参数,但您没有使用它,所以我不确定那里发生了什么。

this.id可能undefined:_

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:_

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);
于 2021-06-04T20:53:47.437 回答