2 回答

TA貢獻1752條經(jīng)驗 獲得超4個贊
arr.map()
issynchronous
和 FileReader 有效asynchronously
,Promise.all
在 map 返回的數(shù)組上使用
參考: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
我修改了你的函數(shù)來讀取所有文件
handleFileChosen = async (file) => {
return new Promise((resolve, reject) => {
let fileReader = new FileReader();
fileReader.onload = () => {
resolve(fileReader.result);
};
fileReader.onerror = reject;
fileReader.readAsText(file);
});
}
readAllFiles = async (AllFiles) => {
const results = await Promise.all(AllFiles.map(async (file) => {
const fileContents = await handleFileChosen(file);
return fileContents;
}));
console.log(results);
return results;
}

TA貢獻1772條經(jīng)驗 獲得超8個贊
請找到完整的代碼以顯示如何讀取多個文件內(nèi)容。如果handleUpload
我準(zhǔn)備并通過傳遞來AllFiles
調(diào)用該函數(shù)。然后我打電話說實際上是在讀取文件內(nèi)容。由于 FileReader 工作,所以需要在這里使用。readAllFiles
AllFiles
readFileContents
readAllFiles
asynchronously
Promise
這是代碼:
import React, {Component} from 'react';
export default class FileReaderExample extends Component {
readFileContents = async (file) => {
return new Promise((resolve, reject) => {
let fileReader = new FileReader();
fileReader.onload = () => {
resolve(fileReader.result);
};
fileReader.onerror = reject;
fileReader.readAsText(file);
});
}
readAllFiles = async (AllFiles) => {
const results = await Promise.all(AllFiles.map(async (file) => {
const fileContents = await this.readFileContents(file);
return fileContents;
}));
console.log(results, 'resutls');
return results;
}
handleUpload = (e) => {
let AllFiles = [];
[...e.target.files].map(file => AllFiles.push(file));
this.readAllFiles(AllFiles).then(result => {
let preview = document.getElementById('showText');
let allFileContents = "";
result.map(res =>{
allFileContents += res + '<br/>'
})
preview.innerHTML = allFileContents;
})
.catch(err => {
alert(err);
});
}
render = () => {
return (<div>
<input type="file" multiple onChange={(e) => this.handleUpload(e)}/>
<div id="showText">Choose text File</div>
</div>
)
}
}
添加回答
舉報