Node.js Promise问题:Developer类code方法正确性排查求助
问题分析与修正方案
原代码存在多处不符合需求的问题,逐一说明如下:
核心问题点
- 构造函数属性赋值错误:构造函数里把传入的
language赋值给了this.role,但类的getLanguage、code方法都是读取this.language,导致语言属性从未正确初始化,所有判断都会进入else分支。 - Promise未触发状态变更:
code方法返回的Promise没有调用resolve()或reject(),导致Promise永远处于pending状态,完全没实现“解析对应字符串”或“拒绝Promise”的要求,只是在控制台打印内容。 - 冗余代码:
code开头的this.getName()和this.getLanguage()只是调用方法但未使用返回值,属于无效代码。 - 实例初始化参数缺失:创建
mydeveloper实例时没传name和language参数,导致this.name和this.language(原本就赋值错误)都是undefined。 - 字符串转义错误:代码里的
"是HTML转义字符,在JavaScript中应直接用双引号,或用模板字符串简化写法。
修正后的代码
class Developer { // 类名遵循大驼峰命名规范 constructor(name, language) { this.name = name; this.language = language; // 修正属性赋值,将language存入正确的实例属性 } getName() { return this.name; } setName(name) { this.name = name; } getLanguage() { return this.language; } setLanguage(language) { this.language = language; } code() { return new Promise((resolve, reject) => { switch(this.language) { case 'nodejs': resolve(`console.log("Hello, ${this.name}!")`); break; case 'java': resolve(`System.out.println("Hello, ${this.name}!")`); break; case 'python': resolve(`print("Hello, ${this.name}!")`); break; default: reject(new Error("Unsupported language")); // 按要求用Error实例拒绝Promise } }); } } // 传入正确的初始化参数 let myDeveloper = new Developer('Bruno', 'nodejs'); // 使用Promise的then/catch处理结果 myDeveloper.code() .then(codeStr => console.log(codeStr)) .catch(err => console.error(err.message));
修正说明
- 修正构造函数的属性赋值逻辑,确保
language正确存入实例属性; - 在Promise内部通过
resolve()返回对应字符串,通过reject(new Error())处理不支持的语言; - 用模板字符串简化字符串拼接,替换错误的HTML转义字符;
- 实例化时传入必要参数,并通过
then和catch处理Promise的状态; - 类名和实例名遵循JavaScript命名规范(大驼峰类名,小驼峰实例名)。
内容的提问来源于stack exchange,提问作者Bruno Franzini
相关产品推荐
相关产品推荐

