Я новичок в программировании JavaScript, и я даже не знаю, как спросить Google, поэтому я подробно расскажу о том, чего бы я хотел достичь.Как переписать свойство constructor из функции
Я использую Node.js и xml2js модуль для создания DataProvider класс для жасмин, что разобрать простой XML-файл:
<Tests>
<Test name="test1">
<values>2,4,6</values>
<expectations>1,2,3</expectations>
</Test>
<Test name="test2">
<values>8,10,12</values>
<expectations>4,5,6</expectations>
</Test>
</Tests>
Я хотел бы DataProvider конструктор немедленно разобрать XML и есть результат, видимую в this.testData
. Сценарий:
var fs = require('fs'),
xml2js = require('xml2js'),
util = require('util');
var DataProvider = function(dataPath) {
this.dataPath = dataPath;
this.testData;
fs.readFile(this.dataPath, function(err, data) {
var parser = new xml2js.Parser();
parser.parseString(data, function(err, result) {
//console.log(util.inspect(result, false, null));
this.testData = result;
});
});
};
Я использую это нравится следующим образом:
var dp = new DataProvider("C:\\data2.xml");
console.log(dp.testData);
Когда я бегу сценарий >node script.js
Я получаю undefined
. Когда я раскомментировать console.log(util.inspect(result, false, null));
Я получаю
undefined
{ Tests:
{ Test:
[ { '$': { name: 'test1' },
values: [ '2,4,6' ],
expectations: [ '1,2,3' ] },
{ '$': { name: 'test2' },
values: [ '8,10,12' ],
expectations: [ '4,5,6' ] } ] } }
так вообще это работает, но как назначить result
для this.testData
?
Связано это с областью this.testData
?
возможного дубликата [Получить данные из фс. readFile] (http://stackoverflow.com/questions/10058814/get-data-from-fs-readfile) – hugomg
Согласно [этому аналогичному вопросу] (http://stackoverflow.com/questions/10058814/get-data- from-fs-readfile), вы можете использовать 'readFileSync' вместо' readFile'. Однако это противоречит асинхронности node.js - вам может потребоваться изменить интерфейс на что-то с помощью async 'init' metho d вместо связывания всего в конструкторе. – hugomg