You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Promise问题:Developer类code方法正确性排查求助

问题分析与修正方案

原代码存在多处不符合需求的问题,逐一说明如下:

核心问题点

  1. 构造函数属性赋值错误:构造函数里把传入的language赋值给了this.role,但类的getLanguage、code方法都是读取this.language,导致语言属性从未正确初始化,所有判断都会进入else分支。
  2. Promise未触发状态变更:code方法返回的Promise没有调用resolve()或reject(),导致Promise永远处于pending状态,完全没实现“解析对应字符串”或“拒绝Promise”的要求,只是在控制台打印内容。
  3. 冗余代码:code开头的this.getName()和this.getLanguage()只是调用方法但未使用返回值,属于无效代码。
  4. 实例初始化参数缺失:创建mydeveloper实例时没传name和language参数,导致this.name和this.language(原本就赋值错误)都是undefined。
  5. 字符串转义错误:代码里的"是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:18:28