在另一个JS文件- Node.js(ESM而不是CJS)中重用已经随机生成的数字

p4tfgftt  于 2023-01-30  发布在  Node.js
关注(0)|答案(2)|浏览(144)

我需要帮助我的项目。我正在使用ESM(而不是CJS)创建Node.js CLI游戏。
在我的randomHealth.js文件中,我有一个生成随机数的函数:

let randomHealth = () => {
  return Math.floor(Math.random() * 300 + 1)
}

export default randomHealth

在我的stats.js文件中,我需要导入并显示这个数字。但是,我需要在那里进行修复,因为我需要在另一个文件中使用相同的数字:

import random from "./random/random.js"
import randomHealth from "./random/randomHealth.js"

let stats = () => {
  console.log("STATS")

  let playerHealth = randomHealth()
  console.log("Health - " + playerHealth)
}

export default stats

我将它存储在一个playerHealth变量中,因为我需要获取生成的那个数字。
现在,我需要另一个文件fight.js中的变量来使用它。如果我调用randomHealth(),它只会生成一个新的数字,我需要一个已经在stats.js文件中生成的数字。如何从stats.js中获取该数字,以便在fight.js中使用它?
我试过导出该变量并将其导入到fight.js中,但一旦我执行console.log(),它就会显示 * undefined *。我尝试了许多不同的操作,但都没有成功。它返回 * undefined NaN * 或者什么都没有。我还试过立即将其存储到randomHealth.js中的一个变量中,然后显示它。但这也不起作用。如果我在randomHealth.js中执行console.log,那么当我想在另一个文件中显示它时,我需要再次执行此操作,而双console.log显示 * undefined *。如果我不执行此操作,t到randomHealth.js中的console.log,那么它总是重新生成一个新的随机数,我需要在stats.js中显示的数字,以便在fight.js中使用。
有什么想法吗?这只是我的想法,如果有一个更好的方法来做到这一点,存储在一个变量在stats.js然后无论如何告诉我。
先谢了。

dced5bon

dced5bon1#

你的问题是每次调用***randomHealth()***,你都重新定义了健康点。为了修补它,我建议你把值存储在函数之外,然后导出它们。
统计数据. js:

import randomHealth from './randomHealth.js'

export var healthPlayer1 = randomHealth();
export var healthPlayer2 = randomHealth();
export var healthPlayer3 = randomHealth();

export let stats = () => {
    console.log("STATS")
    console.log("Player 1 - " + healthPlayer1)
    console.log("Player 2 - " + healthPlayer2)
    console.log("Player 3 - " + healthPlayer3)
}

main.js

import { stats } from './stats.js';

import { healthPlayer1, healthPlayer2, healthPlayer3 } from './stats.js';

stats(); 
// Player 1 - 211
// Player 2 - 98
// Player 3 - 240

console.log(healthPlayer1);// 211
console.log(healthPlayer2);// 98
console.log(healthPlayer3);// 240

现在你可以只使用导出的HP,也许你应该在同一个脚本中创建修改HP的函数,这样你就可以在同一个脚本中集中所有相关的函数,使它更干净,更容易使用。
希望对你有帮助

rbpvctlc

rbpvctlc2#

尝试导出randomHealth函数的结果:

const randomHealth = () => {
  return Math.floor(Math.random() * 300 + 1)
}

export default randomHealth()

相关问题