|
|
坚强的馒头 · webview加载银联支付在ios手机下显示 ...· 1 年前 · |
|
|
开朗的路灯 · java 导出文件中文名乱码 - CSDN文库· 1 年前 · |
|
|
怕考试的熊猫 · qtablewidget获取当前行数 - ...· 1 年前 · |
|
|
打篮球的抽屉 · Laravel中的日期/时间查询有不同的格式要求· 2 年前 · |
|
|
刀枪不入的莴苣 · LLMs之BELLE:BELLE(一款能够帮 ...· 2 年前 · |
我希望读取一个文件并使用FileReader对象将其转换为Base 64编码的字符串。下面是我使用的代码:
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result_base64 = evt.target.result;
reader.readAsDataURL(file);
但在本例中,我得到了事件处理程序(onLoadEnd事件)中的转换结果。我想要一种同步方法。是否有一种方法“readAsDataURL”可以直接返回‘结果’的‘变量'result_base64'的值?
同步任务(阻塞)通常是不好的。如果没有真正的理由异步地这样做,我强烈建议使用事件回调。
假设文件被破坏,HTML 5 API无法读取,它不会给出结果。它会破坏代码并阻塞站点。或者,有人可以选择一个10 GB的文件,这将冻结HTML页面,直到文件完全加载。有了这个异步事件处理程序,就能够捕获可能的错误。为了解决回调的限制,我使用了一个简单的技巧:
var ready = false;
var result = '';
var check = function() {
if (ready === true) {
// do what you want with the result variable
return;
setTimeout(check, 1000);
check();
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result = evt.target.result;
ready = true;
reader.readAsDataURL(file);
Check函数,每秒钟检查就绪标志变量是否设置为true。如果是这样,可以确保结果是可用的。
这样做可能不是最好的实践,但我使用这种技术制作了一个Web应用程序,同时运行了10次以上的setTimeout,直到现在还没有遇到任何问题。
在Node.js中,使用
execSync
从
child_process
并让shell同步读取它。将此子进程的输出重定向到父进程。
// Don't forget to use your favorite encoding in toString()
var execSync = require('child_process').execSync;
var fileContents = execSync('cat path/to/file.txt', {stdio: "pipe"}).toString();
var file = $('#myfile')[0].files[0];
var reader = new FileReader();
reader.onload = function(progressEvent) {
//console.log(this.result);
handle(this.result);
reader.readAsText(file);
function handle(temp_lines) {
var inputLines=new Array();
var lines = temp_lines.split('\n');