首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中如何同步读取文件?

在Javascript中如何同步读取文件?
EN

Stack Overflow用户
提问于 2018-01-31 00:25:53
回答 3查看 0关注 0票数 0

我希望读取一个文件并使用FileReader对象将其转换为Base 64编码的字符串。下面是我使用的代码:

代码语言:javascript
复制
    var reader = new FileReader();
    reader.onloadend = function(evt) {  
        // file is loaded
        result_base64 = evt.target.result; 
    };
    reader.readAsDataURL(file); 

但在本例中,我得到了事件处理程序(onLoadEnd事件)中的转换结果。我想要一种同步方法。是否有一种方法“readAsDataURL”可以直接返回‘结果’的‘变量'result_base64'的值?

EN

回答 3

Stack Overflow用户

发布于 2018-01-31 07:58:00

同步任务(阻塞)通常是不好的。如果没有真正的理由异步地这样做,我强烈建议使用事件回调。

假设文件被破坏,HTML 5 API无法读取,它不会给出结果。它会破坏代码并阻塞站点。或者,有人可以选择一个10 GB的文件,这将冻结HTML页面,直到文件完全加载。有了这个异步事件处理程序,就能够捕获可能的错误。为了解决回调的限制,我使用了一个简单的技巧:

代码语言:javascript
复制
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,直到现在还没有遇到任何问题。

票数 0
EN

Stack Overflow用户

发布于 2018-01-31 08:29:46

在Node.js中,使用execSyncchild_process并让shell同步读取它。将此子进程的输出重定向到父进程。

代码语言:javascript
复制
// 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();
票数 0
EN

Stack Overflow用户

发布于 2018-01-31 10:23:27

代码语言:javascript
复制
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');

    for(var line = 0; line < lines.length; line++) {
        console.log(lines[line]);
        inputLines[line]=lines[line];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档