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
相关产品推荐
相关产品推荐

