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

NodeJS使用回调与事件Emitter实现倍数求和的代码问题排查

问题原因

  • 求和逻辑错误:原代码使用||判断倍数,两个数的公倍数仅累加一次,不符合求和规则;同时循环范围设置为x < 1000,漏掉了1000这个边界值,最终计算结果和预期不符。
  • 未满足规则要求:没有使用Node.js事件发射器实现MyEvent事件的注册与触发逻辑,也没有实现2秒延迟打印求和结果的功能,未用到题目指定的回调、事件相关概念。

正确实现代码

const EventEmitter = require('events');

process.stdin.resume();
process.stdin.setEncoding("ascii");
var input = "";
process.stdin.on("data", function (chunk) {
    input += chunk;
});

process.stdin.on("end", function () {
    // 提取输入的两个整数
    let _input = input.trim().split(" ");
    let n1 = parseInt(_input[0]);
    let n2 = parseInt(_input[1]);

    // 实现事件发射器相关逻辑
    const emitter = new EventEmitter();
    // 定义logInfo函数
    function logInfo() {
        console.log(`Multiples of ${n1} & ${n2}`);
    }
    // 注册MyEvent事件
    emitter.on('MyEvent', logInfo);
    // 触发事件,不传参数
    emitter.emit('MyEvent');

    // 带回调的求和函数,计算完成后延迟2秒调用回调打印结果
    function calcSum(num1, num2, printCallback) {
        let sum = 0;
        // 范围是1到1000(含1000)
        for (let x = 1; x <= 1000; x++) {
            // 两个条件独立判断,重复倍数分别累加
            if (x % num1 === 0) sum += x;
            if (x % num2 === 0) sum += x;
        }
        // 延迟2秒执行回调打印结果
        setTimeout(() => {
            printCallback(sum);
        }, 2000);
    }

    // 调用求和函数,传入打印回调
    calcSum(n1, n2, (result) => {
        console.log(result);
    });
});

验证结果

  • 输入4 6,输出结果为208666,符合预期
  • 输入3 5,输出结果为267333,符合预期

内容的提问来源于stack exchange,提问作者Coder-Neel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:57:03