Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript base64编码函数返回未定义的_Javascript_Reactjs_Base64 - Fatal编程技术网

Javascript base64编码函数返回未定义的

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()函数运行所需的时间

我正在尝试将Base64编码的图像添加到字符串数组中。使用react bootstrap的FormControl创建的文件输入表单:

<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);
}