2017-03-17 71 views
1

我开始在node.js中,我只想用我的类B到我的类A中,但它似乎不工作...这是我非常简单的代码,我想我做错了什么......我有2个文件(2班):节点JS Instanciate类A在类B

Poney.js:

const {DeadPool} = require('./DeadPool'); 

class Poney { 


    constructor() { 
    this.regInter = setInterval(() => this.Regeneration(), 500); 
    this.energy = 0; 
    this.isUnicorn = false; 
    } 

    Regeneration() { 
    this.energy += 10; 
    console.log(`Regeneration, Vitalite : ${this.Vitalite}`); 
    if (this.energy > 100) { 
     console.log('Evolution'); 
    } 
    } 

    KillPoney() { 
    clearInterval(this.RegInter); 
    } 

    evolve() { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
     if (this.isUnicorn = false) { 
      console.log('pas une licorne'); 
      if(this.energy > 100) { 
      resolve(); 
      this.energy = 0; 
      this.isUnicorn = true; 
      console.log('Transformation unicorn !'); 
      } 
      else { 
      console.log('Energie insuffisante'); 
      reject(); 
      } 
     } 
     else { 
      reject(); 
      console.log('Already an unicorn'); 
     } 
     }, 1000); 
    }); 


    } 


    backPoney() {     //Retransforme les licornes en poney 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
     if (this.isUnicorn = false) { 
      resolve(); 
      this.energy = 0; 
      console.log('Back Poney to Unicorn'); 
     } 
     else { 
      reject(); 
      console.log('Not an Unicorn'); 
     } 


     }, 1000); 
    }); 
    } 
} 

const myDeadpool = new DeadPool(); 



//setTimeout(() => MyPoney.killPoney(), 10000); 

module.exports = {Poney}; 

DeadPool.js:

const {Poney} = require('./Poney'); 

class DeadPool { 


    constructor() { 

    this.regInterDead = setInterval(() => this.regeneration(), 4000); 
    this.transInter = setInterval(() => this.makeUnicorn(), 4000); 
    this.isRegenerate = false; 
    this.poneys = []; 
    for (var iVal = 0; iVal < 10; iVal++) { 

     this.poneys.push(new Poney()) 
    } 

    } 
    makeUnicorn(){ 
    this.makeEvolve() 
     .then(() => console.log('Evolve ok !')) 
     .catch(() => console.log('error evolve')); 
    } 

    regeneration(){ 
    this.checkPoney() 
     .then(() => console.log('Regeneration Deadpool')) 
     .catch(() => console.log('Pas de regeneration')); 
    } 



    checkPoney() { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
     var iNumPoney = Math.floor((Math.random() * 10) + 1); 
     var bConard = (Math.floor((Math.random() * 1) + 1) >= 1);  // 1 chance sur 2 d'utiliser la licorne 
     if (bConard){ 
      this.poneys[iNumPoney].backPoney() 
      .then(() => console.log('Licorn to Poney ok')) 
      .catch(() => console.log('back licorn rejected')); 
      this.isRegenerate = true; 
      resolve(); 
     } 

     else{ 
      console.log('Je ne suis pas un conard'); 
      reject(); 
     } 
     }, 1000); 
    }); 
    } 


    makeEvolve() { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
     var iNumPoney = Math.floor((Math.random() * 10) + 1); 
     var bGentil = (Math.floor((Math.random() * 1) + 1) > 1);  // 1 chance sur 2 de la faire evoluer 
     if(bGentil) { 
      poneys[iNumPoney].evolve() 
      .then(() => console.log('TRANSFORMATION !')) 
      .catch(() => console.log('Evolution impossible')); 
      resolve(); 

     } 
     else { 
      console.log('Pas gentil'); 
      reject(); 
     } 


     }, 1000); 
    }); 


    } 
} 


module.exports = {DeadPool}; 

我在小马驹的构造一个错误,当我试图实例化新的小马驹:

*"C:\Program Files (x86)\JetBrains\WebStorm 2016.3.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\Stef\Desktop\Cours\JS\Poney.js 
C:\Users\Stef\Desktop\Cours\JS\DeadPool.js:19 
     this.poneys[iVal] = new Poney(); 
         ^
TypeError: Poney is not a constructor 
    at new DeadPool (C:\Users\Stef\Desktop\Cours\JS\DeadPool.js:19:27) 
    at Object.<anonymous> (C:\Users\Stef\Desktop\Cours\JS\Poney.js:74:20) 
    at Module._compile (module.js:571:32) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 
    at Module.runMain (module.js:605:10) 
    at run (bootstrap_node.js:422:7) 
    at startup (bootstrap_node.js:143:9)* 

谢谢您的帮助..

+0

您的要求是循环参考。我会尽量避免这种情况。 一个文件开始执行,并在它实例化任何事情之前,它会关闭并尝试执行另一个文件。其他文件然后执行相同的操作。既没有创建出口,也没有在要求的结果中得到任何回报。 (类似的东西) – Chris

回答

1

正如我评论,你通知要求正在造成的问题。

尝试在实例化DeadPool时将Poney类传入DeadPool。

  1. 从DeadPool中删除const {Poney} = require('./Poney');
  2. 变化const myDeadpool = new DeadPool();const myDeadpool = new DeadPool(Poney);
  3. 变化Deadpool构造采取小马驹constructor(Poney) {

有很多方法可以做到这一点,这只是一个简单的例子。