【发布时间】:2019-06-26 06:52:10
【问题描述】:
我有一段代码使用 fetch() 来抓取 .tiff 图像并将其转换为 html5 画布,以便使用 tiff.js 在浏览器中显示( https://github.com/seikichi/tiff.js/tree/master)。它几乎工作得很好,但是,我注意到有时图像无法进入浏览器。
会出现一些图像,但偶尔会出现其他图像,并在浏览器中显示以下错误消息:
ReferenceError: Tiff is not defined
我需要找出是否有确保成功创建这些对象的好方法,如果我能深入了解导致这种行为的原因,我将不胜感激。
class tiffImage {
constructor() {
this.tiffURL = 'url-to-image';
this.height;
this.width;
this.canvas;
}
async loadImage() {
fetch(this.tiffURL)
// retrieve tiff and convert it to an html5 canvas
let response = await fetch(this.tiffURL);
let buffer = await response.arrayBuffer();
let tiff = new Tiff({buffer: buffer}); // error points to this line
this.canvas = tiff.toCanvas();
/* Parse some data from image and do DOM stuff */
}
}
// retrieve and display boards
let someTiff1 = new tiffImage();
let someTiff2 = new tiffImage();
let someTiff3 = new tiffImage();
let someTiff4 = new tiffImage();
let someTiff5 = new tiffImage();
someTiff1.loadImage();
someTiff2.loadImage();
someTiff3.loadImage();
someTiff4.loadImage();
someTiff5.loadImage();
有时可能会加载所有图像,有时则不会。如果页面刷新足够多次,则可以保证看到某些图像无法加载。请注意,在我的实际项目中,我在 13 个对象上实例化并调用 loadImage()。
【问题讨论】:
-
是的:使用
fetch()返回的Promise。 -
为什么你有
fetch(this.tiffURL),然后是let response = await fetch(this.tiffURL);?此外,错误似乎指向在fetch返回之前未加载此“tiff.js”,这似乎很奇怪。您可能想查看相对于您对loadImage的调用加载该库的位置... -
@Pointy 如果您对自己的评论有信心,您能详细说明一下吗?据我所知,问题不在于
fetch()调用,而在于Tiff()对象的实例化。 -
@Heritic Monkey 不错的收获!我减少了代码以发布示例,但仍然没有发现该错误。删除第一个
fetch()调用后,页面要么加载所有图像,要么不加载任何图像,而不是只加载一些图像,这很有趣。 -
@Heritic Money 看来我正在加载 tiff.js 库 tiff.min.js包含上述代码示例的文件。重新排序似乎已经纠正了这个问题。我需要看到它运行一段时间才能真正测试它,但它看起来很有希望。如果您愿意将您的建议作为答案发布,我会接受,谢谢!
标签: javascript ajax asynchronous fetch