Javascript的并发问题-我需要一种方法来检查文件加载是否已完成
各位用户和读者好, 我正在用JS为Firefox/Gecko 2.x编写一个相当简单的程序,并且遇到了一个与我所知相去甚远的问题。 问题是:我使用以下代码将文件内容读取为字符串: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;
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
]);
非常感谢,我马上就要测试了。几分钟后我会告诉你的。也谢谢你,我要做一些测试。