2017-07-28 210 views
0

我想创建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所以这种方法有什么问题?

+0

此代码有一个概念设计问题。您尝试阅读构造函数中的内容,但构造函数之外的人在内容读取完毕后并没有任何想法,并且实际上对'getFileContent()'有效。这在实践中根本无法可靠地工作(或者根本不可能)。这个概念需要重新设计,可能使用承诺,因此getFileContent()的调用者使用异步调用约定来知道内容何时可用。 – jfriend00

回答

4

改变这一行:FileReader reader = new FileReader('');const reader = new FileReader('');

+0

似乎完美,但请你详细说明为什么它不起作用在我的情况 –

+1

@NaderHisham因为'FileReader reader'部分没有意义。如果它是一个变量,它应该用'var/let/const'声明。 – estus

+0

并记住,使const不变:D – dfee

2

有两个问题在你的代码:

  1. 您正在阅读的构造文件内容,在大多数情况下,fileContent将是不确定的,因为fs.readFile是异步函数。
  2. 你没有创建文件路径读者: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 
     }); 
    } 
} 
+0

但在这种情况下,我们不使用我们在另一个文件 –

+0

中创建的FileReader类?为什么?你正在创建它:'let reader = new FileReader(realFilePath);',并使用它的方法:'reader.getFileContent' – alexmac

+0

好吧,完美我没有看到更新的答案 –