gpt4 book ai didi

javascript - 每 X 秒在服务器中生成随机数

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:09 24 4
gpt4 key购买 nike

背景

我正在制作一个 Node.js 应用程序,每 6 秒生成一个随机数,并通过 API 提供它。

为了将数字生成逻辑保留在 API 文件之外,我将其封装在另一个文件中名为 numberGen 的函数中。

api.js

const express = require("express");
const numberFactory = require("../numberGen.js");

module.exports = (function() {
let interval = 6, min = 0, max = 100;

const api = express.Router();
const numberGen = numberFactory({
interval, min, max
});
numberGen.run();

api.get("/Numbers/", (req, res) => {
res.json({ random: numberGen.currNum});
});

return api;
})();

numberGen.js

"use strict";

module.exports = function(args) {
let {
interval,
min,
max
} = args;

let currNumber = genRandom(min, max);

function run() {
setTimeout(() => {
currNumber = genRandom(min, max);
run();
}, interval);
}

function genRandom(min, max){
return Math.floor(Math.random() * max) + min;
}

return {
interval, currNumber,
run
};
};

理想情况下,客户端在 0 秒时发出请求,将获得数字 X,并在 6 秒后发出相同的请求,将获得数字 Y,因为服务器每 6 秒生成一个新的随机数。

问题

这里的问题是,无论如何,客户端总是得到相同的号码。

暂定

起初我以为发生这种情况是因为 numberGen 返回一个永远不会改变的对象。为了解决这个问题,我尝试将一个数字从 api.js 传递到生成器进行更新,但它也不起作用,因为客户端总是得到一个空对象,因为 serverNum === undefined;

numberGen.js

"use strict";

module.exports = function(args) {
let {
interval,
min,
max,
serverNum
} = args;

serverNum = genRandom(min, max);

function run() {
setTimeout(() => {
serverNum= genRandom(min, max);
run();
}, interval);
}

function genRandom(min, max){
return Math.floor(Math.random() * max) + min;
}

return {
interval,
run
};
};

api.js

const express = require("express");
const numberFactory = require("../numberGen.js");

module.exports = (function() {
let interval = 6, min = 0, max = 100, serverNum;

const api = express.Router();
const numberGen = numberFactory({
interval, min, max, serverNum
});
numberGen.run();

api.get("/Numbers/", (req, res) => {
res.json({ random: serverNum});
});

return api;
})();

问题

考虑到我想将此逻辑与 api.js 文件分开,我该如何修复我的代码?

最佳答案

您返回的对象包含特定时间点的 currNumber 值 - 而不是引用。添加一个返回数字的实际当前值的函数,并调用该函数而不是 numberGen.currNum

numberGen.js

module.exports = function(args) {
// add this function
function getNumber() {
return currNumber;
}
}

api.js

api.get("/Numbers/", (req, res) => {
res.json({ random: numberGen.getNumber()});
});

关于javascript - 每 X 秒在服务器中生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43185624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com