2017-03-17 3 views
1

Ich beginne in node.js und ich möchte nur meine Klasse B in meine Klasse A, aber es scheint nicht funktionieren ... Hier ist mein sehr einfacher Code, schätze ich etwas falsch gemacht ... ich habe 2 Dateien (für 2 Klassen):Knoten JS Instanciate Klasse A in Klasse 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}; 

Und ich habe einen Fehler im Konstruktor von Poney, wenn ich neue Poney instanziieren bin versucht:

*"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)* 

Dank für Ihre Hilfe danken ..

+0

Ihre Anforderungen sind eine zirkuläre Referenz. Ich würde versuchen, das zu vermeiden. Eine Datei startet die Ausführung, und bevor sie alles instanziiert, wird sie ausgeführt und versucht, die andere Datei auszuführen. Die andere Datei macht dasselbe. Weder haben Exporte noch erstellt, so dass Sie einfach nichts voneinander in den Require-Ergebnissen erhalten. (so ähnlich) – Chris

Antwort

1

Als ich bemerkte, benötigt Ihr Kreis verursachen ein Problem .

Versuchen Sie, die Poney-Klasse in DeadPool zu übergeben, während Sie DeadPool instanziieren.

  1. Entfernen Sie const {Poney} = require('./Poney'); von DeadPool.
  2. ändern const myDeadpool = new DeadPool();-const myDeadpool = new DeadPool(Poney);
  3. ändern Deadpool Konstruktor in Poney constructor(Poney) {

Es gibt Sie es viele Möglichkeiten nehmen tun können, ist dies nur ein einfaches Beispiel.

Verwandte Themen