Я пытаюсь сделать запрос API на мой сервер, где у меня есть файлы, которые я отправляю вместе.
Я создал массив пользовательских объектов, в котором у меня есть два параметра: расширение файла и база необработанных данных654 в кодировке
onSubmitHandler = (e) =>{
e.preventDefault()
const contactRequest = {
email: this.state.email,
name: this.state.name,
message: this.state.message,
files: this.state.files,
result: this.state.files.map(file => ({
"file": this.findFileTypeHandler(file.name),
"data": this.getBase64(file)
}))
}
console.log(this.getBase64(this.state.files[0]))
console.log(contactRequest)
}
Проблема в моей функции getBase64
Я попробовал несколько подходов.
getBase64 = file => {
let ans = ''
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
console.log(reader.result) //logged correctly here, but after undefined is returned
ans = reader.result
};
reader.onerror = function (error) {
console.log('error is ', error)
return error;
};
return ans;
}
правильный ответ записывается правильно, но сначала возвращается неопределенный.Это связано с асинхронным поведением.
Есть ли способ, поэтому я могу заставить его ждать, пока функция будет загружена правильно.
Первоначально я думал о том, чтобы сделать асинхронный подход ожидания, но я думаю, что это может привести к путанице, поскольку я уже планирую использовать обещания, когда я отправляю запрос на мой сервер.