Javascript的并发问题-我需要一种方法来检查文件加载是否已完成

Javascript的并发问题-我需要一种方法来检查文件加载是否已完成,javascript,file,events,concurrency,loading,Javascript,File,Events,Concurrency,Loading,各位用户和读者好, 我正在用JS为Firefox/Gecko 2.x编写一个相当简单的程序,并且遇到了一个与我所知相去甚远的问题。 问题是:我使用以下代码将文件内容读取为字符串: NetUtil.asyncFetch(my_file, function(inputStream, status) { if (!Components.isSuccessCode(status)) { return;

各位用户和读者好, 我正在用JS为Firefox/Gecko 2.x编写一个相当简单的程序,并且遇到了一个与我所知相去甚远的问题。 问题是:我使用以下代码将文件内容读取为字符串:

NetUtil.asyncFetch(my_file, function(inputStream, status) {
                    if (!Components.isSuccessCode(status)) {
                        return;
                    }
my_string = NetUtil.readInputStreamToString(inputStream, inputStream.available());
]);
读取文件后,我立即评估以下条件:

if (my_string.length == 0) {
    //do something...
} else {
    //do something else...
}
好的,所以问题是,尽管文件中有一些字符,但如果它是脚本的第一次运行,它将始终进入第一个条件,因为它没有足够的时间读取文件并将字符加载到字符串中。在第二次运行时,全局变量my_string具有先前获取的值,因此它将进入“else”状态。 问题是:如何在JavaScript中侦听“文件加载完成”事件以防止这种行为?
非常感谢。

只要fetch是异步的,我的字符串为空是正常的。您需要订阅一些自定义事件或以某种方式传递回调

NetUtil.asyncFetch(my_file, function(inputStream, status) {
    if (!Components.isSuccessCode(status)) {
        return;
    }
    my_string = NetUtil.readInputStreamToString(inputStream, inputStream.available());
    var evt = document.createEvent('Event');
    evt.initEvent('inputReady', true, true);
    evt.my_string = my_string;
    document.dispatchEvent(evt);
});
然后订阅此活动

document.addEventListener('inputReady', function(e){
    alert(e.my_string);
});

注意:未测试

您好,我不熟悉Firefox/Gecko 2.x的NetUtil,但是这个概念看起来很熟悉

我想这是因为

 NetUtil.asyncFetch
调用后调用回调函数

if (my_string.length == 0) {
//do something...
} else {
//do something else...
} 
为什么不尝试在正确的位置使用数据呢

    NetUtil.asyncFetch(my_file, function(inputStream, status) {
                if (!Components.isSuccessCode(status)) {
                    return;
                }
    my_string = NetUtil.readInputStreamToString(inputStream, inputStream.available());

    alert(my_string.length);  //is here is also be 0 ???????
    //do some stuff with the data
 ]);

非常感谢,我马上就要测试了。几分钟后我会告诉你的。也谢谢你,我要做一些测试。