【发布时间】:2022-01-13 16:23:30
【问题描述】:
我正在调用 javascript 函数来初始化 Oracle Visual Builder (VBCS) 中的变量值。该函数以二进制数据为输入,需要同步返回Base64转换后的字符串,以便将Base64转换后的字符串赋值给VBCS变量。
该函数不返回经过 Base64 转换的字符串。如何让它返回 Base64 字符串给调用函数?
PageModule.prototype.convertbase64 = function (data) {
const blob = new Blob([data], {
type: "application/octet-stream"
});
function blobToBase64(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => resolve(reader.result.toString().substr(reader.result.toString().indexOf(',') + 1));
reader.onerror = error => reject(error);
console.log(new Date());
});
};
const retstring = blobToBase64(blob).then(finalString => { return finalString });
console.log('retstring value', retstring);
return retstring;
};
【问题讨论】:
-
1.你的承诺不会返回任何东西,只是记录
new Date(); 2. 你在承诺完成之前登录retstring是then部分。移动console.log('retstring value', retstring);reader.onloaded。 -
@Justinas - 承诺是通过字符串实现的,不是吗?
-
.then(finalString => { return finalString })毫无意义,它只是创建一个新的承诺,等待承诺被履行,然后传递履行价值。另见:stackoverflow.com/questions/29516390/… -
什么是
data? -
读取 blob 可能是一项耗时(在计算机方面)的操作;例如,它可能涉及从磁盘读取文件。很难证明是否定的,但我认为没有 any 方法可用于同步读取 blob 的内容,这就是该代码(稍微过时)使用 @987654331 的原因@。如果您查看
Blob接口,您会看到几种读取其内容的方法(text、arrayBuffer、stream),它们都是a同步的。有...
标签: javascript promise base64