【发布时间】:2023-04-03 23:10:02
【问题描述】:
我正在尝试将本地 .json 文件上传到我的 Web 应用程序中。我已经到了可以在开发工具中显示该文件的地步,但我无法使其可供进一步使用。我怀疑问题出在我处理(或不处理)文件读取器的异步行为的方式上。
所有东西都在 Angularjs (1.7) 环境中工作,因此是 sn-p 的语法。预期用途是在 openlayers 地图上显示读取的数据。
this.jsonSelected = function(newFile) {
let reader = new FileReader();
let result = 'empty';
reader.readAsText(newFile);
reader.onload = function(e) {
result = e.target.result;
console.log('in onload', result);
this.result = e.target.result;
};
console.log(this.result);
};
this.test = function() {
console.log(this.file);
}
我希望代码会注销文件内容两次。一旦打开“console.log('in onload',结果);”又一次在“console.log(this.result);”上。第一个按预期工作。但由于某种原因,第二个不会。控制台中的顺序也颠倒了,console.log(this.result)位于加载日志之前,如您在此screenshot of the console 中所见。
我尝试了几种变体,翻转了名称,更改了 this。等等,但无济于事。这就是为什么我认为我搞砸了异步数据的处理。此外,屏幕截图,更具体地说是日志中的线条,表明存在某种时间问题。
【问题讨论】:
-
如果应用是客户端应用,很抱歉,您的浏览器将无法在本地保存。
-
我不想在本地保存数据,恰恰相反。 .json 文件是本地的,我想让它的内容可供浏览器使用。
-
控制台顺序与预期一致。设置 onload 函数不会使代码等待加载完成,它会继续并记录为空。一段时间后,加载将完成,onload 函数将运行。就像 xhr 等其他异步操作一样,在结果加载之前尝试使用结果是没有意义的,所以对它的所有处理都应该从 onload 函数中调用。与 xhr 一样,在开始读取之前设置 onload 也是一种很好的做法,以避免在加载比预期更快完成时不会调用 onload。
标签: javascript angularjs file gis openlayers