胡子拉碴的眼镜 · 断网让女神求你:制作一个廉价的WIFI干扰器 ...· 6 月前 · |
苦闷的水龙头 · 园林历史 - 苏州市园林局· 1 年前 · |
忧郁的海龟 · 别瞎买!最新SUV销量:比亚迪王朝/特斯拉霸 ...· 1 年前 · |
独立的椰子 · 广汽传祺发布5月销量数据,MPV车型增长势头 ...· 1 年前 · |
聪明伶俐的墨镜 · 我竟被女魔头豢养了漫画免费 - ...· 1 年前 · |
我希望读取一个文件并使用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');
苦闷的水龙头 · 园林历史 - 苏州市园林局 1 年前 |