Javascript base64编码函数返回未定义的
我正在尝试将Base64编码的图像添加到字符串数组中。使用react bootstrap的FormControl创建的文件输入表单:Javascript base64编码函数返回未定义的,javascript,reactjs,base64,Javascript,Reactjs,Base64,我正在尝试将Base64编码的图像添加到字符串数组中。使用react bootstrap的FormControl创建的文件输入表单: <FormControl type="file" values={this.state.files} multiple onChange={this.addImage.bind(this)} /> 当addImage()函数调用getBase64()函数时,返回的值未定义。我相信这是由于getBase64()函数运行所需的时间
<FormControl
type="file"
values={this.state.files}
multiple
onChange={this.addImage.bind(this)}
/>
当addImage()函数调用getBase64()函数时,返回的值未定义。我相信这是由于getBase64()函数运行所需的时间造成的。当我添加console.log行以输出reader.result时,base64字符串被正确地输出到控制台,但返回的值显然仍然相同
这里发生了什么,如何才能正确返回实际的base64字符串?在异步提供结果的事件处理程序中,从
getBase64
函数同步返回任何值FileReader
loadend
事件异步返回结果。您可以使用Promise.all()
或async/await
从getBase64()
函数调用异步返回值
类读取文件{
构造函数(){}
异步添加映像(事件){
常数newArr=[];
for(设i=0;ireader.addImage.call(reader,e)代码>
您可以看到getBase64
函数中没有return
,对吗?@JaromandaX在getBase64
函数中loadend
事件中有一个return
语句handler@guest271314-您可以看到getBase64
函数中没有return
,对吗?@JaromandaX返回读取器。result
@guest271314-您可以看到getBase64
没有return
语句,对吗?(我会尝试其他措辞,直到你明白为止)
addImage(event) {
var newArr = [];
for(var i=0; i<event.target.files.length; i++) {
newArr.push(this.getBase64(event.target.files[i])));
}
this.setState({ files: newArr });
}
getBase64(file) {
var reader = new FileReader();
reader.onloadend = function() {
return reader.result
}
reader.readAsDataURL(file);
}