|
|
至今单身的保温杯 · 河南省教育厅关于命名河南省第二批语言文字规范 ...· 5 月前 · |
|
|
销魂的海龟 · 阿朱阿紫PK!同演一部戏同嫁豪门的刘涛陈好谁 ...· 10 月前 · |
|
|
个性的红酒 · 为了他,秦始皇不惜发动一场战争,这个男人到底 ...· 1 年前 · |
|
|
自信的楼梯 · 在这个节日里,遇见温暖的中国--社会・法治- ...· 2 年前 · |
|
|
天涯 · 福昕pdf编辑器个人版激活码-掘金· 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');
|
|
销魂的海龟 · 阿朱阿紫PK!同演一部戏同嫁豪门的刘涛陈好谁更好-搜狐娱乐 10 月前 |
|
|
自信的楼梯 · 在这个节日里,遇见温暖的中国--社会・法治--人民网 2 年前 |
|
|
天涯 · 福昕pdf编辑器个人版激活码-掘金 2 年前 |