【问题标题】:Make syncronous file read in javascript用javascript读取同步文件
【发布时间】:2013-12-12 23:48:25
【问题描述】:

我正在尝试使用 Phonegap 读取一些文件并将它们放入一个数组中。我的数组每行有 2 个元素,file namefile content

我现在这样做:

var sharedContent = "";

function populateArray() {

    for (i = 0; i < entries.length; i++) {
        var singleFile = {};
        singleFile.name = entries[i].name;
        entries[i].file(fileSuccess, fileFail);
        singleFile.content = sharedContent;
        fileArray.push(singleFile);
    }
}

function fileSuccess(file) {
    var reader = new FileReader();
    reader.onloadend = function (evt) {
        sharedContent = evt.target.result;
    }
    reader.readAsText(file);
}

var fileFail = function (error) {
    alert(error.code);
}

这可行,但在 for 循环之后触发了 fileSuccess,并且 sharedContent 变量仍然为空。 我怎样才能使它工作? 谢谢!

【问题讨论】:

    标签: javascript file cordova


    【解决方案1】:

    你真的不能那样做。因为它是异步的,所以一切都必须在onload 内发生才能成功。 var sharedContent 的更改只会在您的 onload 函数中可见,除非您 setTimeout() 或执行其他异步操作,我不推荐这样做。

    【讨论】:

    • 感谢您的回答!那么..我可以以某种方式读取for循环内的文件内容吗?比如等待函数完成或者以某种方式返回读取的值
    • 不,当您定义var sharedContent = ""; 时,它在技术上与FileReader 中的文件加载时不同。加载 HTML 页面时会读取您的 JavaScript 页面。除非发生事件,否则不会再次读取它。在这种情况下,当文件成功加载时,事件应该是onload。因此,当您在 Event 之外测试 var sharedContend 时,您实际上是在 Event 发生之前对其进行测试。
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多