【发布时间】:2019-10-31 11:37:24
【问题描述】:
我试图将 blob 转换为 base64,我找到了解决方法,但是在等待函数 displayBase64String 的结果时,submitOffre 中的 map 函数返回一个空字符串,即使 console.log 打印了一些数据.
我将不胜感激任何解决方案 这是我的代码。
submitOffre = (saleData) => {
debugger ;
var result = base64Service.displayBase64String(saleData);
console.log("========", result);
const rs = result.map(value => value.file); // Doesn't work.
console.log(rs); // rs is empty
}
class Base64Service {
blobToBase64 = (blob, callback) => {
var reader = new FileReader();
var data = '';
reader.onload = function () {
var dataUrl = reader.result;
var base64 = dataUrl.split(',')[1];
callback(base64);
};
reader.readAsDataURL(blob);
}
displayBase64String(formProps) {
const result = [];
const outbut = Object.entries(formProps.imageToUpload).map(([key, value]) => {
this.blobToBase64(value, (data) => {
result.push({ "file": `data:${value.type};base64,${data}` })
})
});
return result;
};
}
export default new Base64Service();
【问题讨论】:
-
readAsDataURL方法是异步的,这意味着其余代码在运行之前不会等待它完成。因此,您的result.map行在读取完成之前正在运行,这就是为什么还没有任何数据的原因。 (同样,您的displayBase64String方法也在读取完成之前返回结果,因此它甚至会在此处返回一个空数组。)您需要等到回调运行后再尝试处理数据. (或者承诺阅读,但这是一个稍微高级一点的话题。) -
我还是有点迷路,你能告诉我如何用一些代码来做吗?
-
在您的回调中,您只有
result.push(...)。这也是您需要进行映射和记录的地方,否则您将使用尚未完成读取的数据。 -
我无法在那里进行映射,因为我需要将这些数据发送到服务器。
-
我在您提供的代码中没有看到任何地方表明您正在向服务器发送任何内容。但是为什么不能在那个回调中把它发送到服务器呢?
标签: javascript reactjs async-await base64 blob