导入和导出ES6类
我想创建ES6类,从文件中读取数据,只是返回文件的内容,所以我创建了一个名为FileReader
具有构造filePath
并有一个名为方法类getFileContent
导入和导出ES6类
import fs from 'fs';
import path from 'path';
export class FileReader {
constructor(filePath) {
this.filePath = filePath;
fs.readFile(filePath, (err, data) => {
if (err) {
console.log(err);
}
this.fileContent = data;
});
}
getFileContent(separator, columns) {
console.log(this.fileContent);
}
}
我有称为OrderList
我想使用FileReader
内部componentDidMount
方法来读取文件
import React from 'react';
import {FileReader} from '../Utils/FileReader';
class OrdersList extends React.Component {
constructor(props, context) {
super(props, context);
}
componentDidMount() {
FileReader reader = new FileReader('');
reader.getFileContent(',' , []);
}
render() {
}
}
export default OrdersList;
在PR的内容的反应的成分我得到一个错误Unexpected token reader
所以这种方法有什么问题?
有两个问题在你的代码:
- 您正在阅读的构造文件内容,在大多数情况下,
fileContent
将是不确定的,因为fs.readFile
是异步函数。 - 你没有创建文件路径读者:
FileReader reader = new FileReader('');
要解决的课题,你应该移动逻辑类功能和使用回调或承诺读取文件:
class OrdersList extends React.Component {
constructor(filePath) {
this.filePath = filePath;
}
getFileContent(separator, columns, cb) {
fs.readFile(this.filePath, (err, data) => {
if (err) {
console.log(err);
}
cb(err, data) ;
});
}
}
在OrdersList你应该使用真正的文件名和呼叫功能用回调来读取文件内容:
class OrdersList extends React.Component {
constructor(props, context) {
super(props, context);
}
componentDidMount() {
let reader = new FileReader(realFilePath);
reader.getFileContent(',' , [], (err, content) => {
// TODO: file content in content var
});
}
}
但在这种情况下,我们不使用我们在另一个文件 –
中创建的FileReader类?为什么?你正在创建它:'let reader = new FileReader(realFilePath);',并使用它的方法:'reader.getFileContent' – alexmac
好吧,完美我没有看到更新的答案 –
此代码有一个概念设计问题。您尝试阅读构造函数中的内容,但构造函数之外的人在内容读取完毕后并没有任何想法,并且实际上对'getFileContent()'有效。这在实践中根本无法可靠地工作(或者根本不可能)。这个概念需要重新设计,可能使用承诺,因此getFileContent()的调用者使用异步调用约定来知道内容何时可用。 – jfriend00