2017-04-18 3 views
1

ich diese Datei myService.js wo I Jahreszeiten definieren durch Verwendung Heiz- oder Kühlsysteme genannt haben. Sie unterscheiden sich vor allem im Fall eines südlichen Hemisphäre Land (zB Australien), wo die Jahreszeiten vertauscht sind:ein Attribut von einem anderen Modul in NodeJS Verwendung

const myService= {}; 

const yearTimes = { 
    JapanDefault: { 
     heat: new YearTime('heat', 'Sep', 15, 'Mar', 1), 
     cool: new YearTime('cool', 'Mar', 14, 'Sep', 14) 
    }, 
    AustraliaDefault: { 
     heat: new YearTime('heat', 'Jul', 1, 'Aug', 31), 
     cool: new YearTime('cool', 'Sep', 1, 'Mar', 1) 
    } 
}; 

myService.gettingAnalysis = function (site, Key) { 
    return Promise.all([ 
     myService.findingHeat(site, Key), 
     myService.findingCool(site, Key) 
    ]).spread(function (heat, cool) { 
     return { heating: heating, cooling: cooling }; 
    }); 
}; 
myService.findingHeat = function (site, Key) { 
    return Promise.resolve(YearTime[Key] && YearTime[Key]['heat'] || defaults['heating']); 
}; 

module.exports = myService; 

In einer anderen Datei, die ich für verschiedene Fälle überprüfen muß, zum Beispiel soll ich eine Warnung, wenn es benutzt wird von der Heizung im Sommer. Der Code funktioniert gut für die nördliche Hemisphäre aber falsch für die südlichen, weil es erkennt, dass es Heizsystem im Sommer verwendet wird (Mai, Juni), aber in diesem speziellen Fall, dass diejenigen Wintermonate in der Region sind. Dies ist die zweite Datei Breakdown.js genannt:

const _ = require('underscore'); 
const util = require('util'); 
const stats = require('simple-statistics'); 

const myService = require('./myService'); 
const SUM = 10; 



... 

check('must not indicate heating in summer', function (report) { 
     const model = report.findSection('Breakdown').model; 
     const heatingSeries = _.findWhere(model.series, { name: 'Space heating' }); 
     if (!heatingSeries || model.series.length === 1) { 
      return; 
     } 

     const totalAccounts = _.size(report.asModel().accountNumbers); 
     // TODO: "summer" varies per cohort 
     const warnings = _.compact(_.map(['May', 'Jun'], function (monthLabel) { 
      const summerIndex = _.indexOf(model.xAxisLabels, monthLabel); 
      const heatingSummerCost = heatingSeries.data[summerIndex]; 
      if (heatingSummerCost > (totalAccounts * SUM)) { 
       return { 
        month: monthLabel, 
        cost: heatingSummerCost, 
        accounts: totalAccounts 
       }; 
      } 
     })); 
     this.should(!warnings.length, util.format('heating in summer recommended')); 
    }) 
... 

Was ich versuchte zu tun war, zu ersetzen ['May', 'Jun'] mit myService.findingHeat(site, key) oder myService.seasons.AustraliaDefault, um es zu machen, festzustellen, ob es nicht Sommer in diesem Bereich ist, und es ist normal um Heizkosten zu haben. Hat jemand eine Ahnung, wie dieses Problem zu lösen?

Antwort

1

Sie versuchen, ein Array ['July', 'Aug'] durch ein Objekt der Saison zu ersetzen, das von myService.findingHeatingSeason(report.site, report.cohort) oder myService.seasons.AustraliaDefault zurückgegeben wird, was zu einigen Inkonsistenzen führen kann. Kannst du bitte auch Season Konstruktor angeben?

+0

Ja: https://pastebin.com/DaaVAmMv –

+2

Wie in der Saison Implementierung ['Juli', 'Aug'] sind die StartMonat und EndMonat der Saison, nicht wahr? So haben Sie ein Verfahren zu schaffen, die zurückgibt [season.startMonth, season.endMonth]. Auch 'findingHeatingSeason' gibt Promise.resolve, so dass Sie Antwort als' myService.findingHeatingSeason (report.site, report.cohort) .then (function (data) {console.log (Daten)}) 'bekommen. – Harish

+1

ja, du hast Recht. Sie sind der StartMonat und EndMonth. in diesem Fall gibt es keine anderen Monate zwischen ihnen, aber im allgemeinen Fall könnte es sein. Ich denke also, dass die Rückgabe eines Arrays, das Monate enthält, die Lösung sein sollte –

Verwandte Themen