使用 NodeJS 的回调和事件发射器功能

Callback and event emitter functionality using NodeJS

程序语言为NodeJS

待办步骤: 1.变量input有输入值。从输入中提取 n1 和 n2。 2. 编写一个函数求出 n1 和 n2 所有小于等于 1000 的倍数之和。该函数应在 2 秒后记录总和。 3. 为事件发射器的任何实例注册一个名为 MyEvent 的事件,并为其绑定一个名为 logInfo 的函数,该函数将 "Multiples of {n1} & {n2}" 记录到控制台并发射事件(发射事件时不要传递任何参数) .

约束条件

注意:即使您获得了准确的输出,如果您不使用问题陈述中提到的回调和事件概念,测试用例也会失败。

示例案例 0

自定义测试的样本输入 100 1000 示例输出: 100 和 1000 的倍数 6500

说明 100的倍数为100,200,300,......1000 1000的倍数为1000以下含1000.

总和 = (100+200+............1000) + 1000

总和 = 6500

示例案例 1

自定义测试的示例输入

500 1200

示例输出:

500 和 1200 的倍数

1500


我试过下面的代码:

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.split (" ");
    let a = parseInt(_input[0]);
    let b = parseInt(_input[1]);
    console.log("Multiples of " + a + " & " + b);
    
    var sum = 0;
    for (var x = 0; x < 1000; x++)
    {
        if (x % a === 0 || x % b === 0)
        {
        sum += x;
        }
    }
    console.log(sum);
    
});

代码测试:

案例一

输入(标准输入)
4 6

你的输出(标准输出)

4 和 6 的倍数
165834

预期输出

4 和 6 的倍数
208666

============================================= ==

案例二

输入(标准输入)
3 5

你的输出(标准输出)

3 和 5 的倍数
233168

预期输出

3 和 5 的倍数
267333


请帮助我获取此代码。我的输出不符合这个逻辑。

希望下面的代码对您有所帮助,并给出预期的输出。谢谢! :)

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

process.stdin.on("end", function () {
    const myArr = input.split(" ");
    const EventEmitter = require('events');
    var eventEmitter = new EventEmitter();
    let sum=0;
    let a = myArr[0];
    let b = myArr[1];
    for(let i=3; i<=1000; i++){
        if(i%a==0){
            sum += i
        }
        if(i%b==0){
            sum+=i
        }
    }

    eventEmitter.on('MyEvent', logInfo);

    function logInfo(input) {
        console.log("Multiples of " + a + " & "+ b);
        console.log(sum);
    }

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



process.stdin.on("end", function () {
    const myArr = input.split(" ");
    const EventEmitter = require('events');
    var eventEmitter = new EventEmitter();
    let sum=0;
    let a = myArr[0];
    let b = myArr[1];
    for(let i=3; i<=1000; i++){
        if(i%a==0){
            sum += i
        }
        if(i%b==0){
            sum+=i
        }
    }
    
    eventEmitter.on('MyEvent', function(){
        setTimeout(function(){
            console.log("Multiples of " + a + " & "+ b);
            console.log(sum);},5000);
    });
    
    eventEmitter.emit('MyEvent'); 
});

检查以下解决方案

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

process.stdin.on("end", function () {
    const myArr = input.split(" ");
    const EventEmitter = require('events');
    var eventEmitter = new EventEmitter();
    let sum=0;
    let a = myArr[0];
    let b = myArr[1];
    for(let i=3; i<=1000; i++){
        if(i%a==0){
            sum += i
        }
        if(i%b==0){
            sum+=i
        }
    }

    eventEmitter.on('MyEvent', logInfo);

    function logInfo(input) {
        console.log("Multiples of " + a + " & "+ b);
        console.log(sum);
    }

    eventEmitter.emit('MyEvent', ""); 
});

我只调用了控制台作为异步函数,请避免我的错误。

process.stdin.on("end", function () {

    // Enter your code here
      const myArr = input.split(" ");
    const EventEmitter = require('events');
    var eventEmitter = new EventEmitter();
    let sum=0;
    let a = myArr[0];
    let b = myArr[1];
    for(let i=3; i<=1000; i++){
        if(i%a==0){
            sum += i
        }
        if(i%b==0){
            sum+=i
        }
    }
    setTimeout(function(){
        console.log(sum);
    },2000)

    eventEmitter.on('MyEvent', logInfo);

    function logInfo() {
        console.log("Multiples of " + a + " & "+ b);
        
    }

    eventEmitter.emit('MyEvent'); 

});

我找到了正确的解决方案。

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


process.stdin.on("end", function () {

    const EventEmitter = require('events');
    let data = input.split(" ");
    n1 = data[0];
    n2 = data[1];
    // console.log(n1,n2);

    let result = 0;
    const sum = () => {
        for (let i = 0; i <= 1000; i++) {
            if (i % n1 == 0) {
                result += i;
            }
        }
        for (let j = 0; j <= 1000; j++) {
            if (j % n2 == 0) {
                result += j;
            }
        }
        console.log(result);
    }
    setTimeout(sum, 2000);

    const event = new EventEmitter();

    event.on("MyEvent", () => {
        console.log(`Multiples of ${n1} & ${n2}`);
    })
    event.emit("MyEvent");



});