Javascript 如何等待所有图像从loadfromjson加载到fabric js中的画布?

Javascript 如何等待所有图像从loadfromjson加载到fabric js中的画布?,javascript,fabricjs,Javascript,Fabricjs,我想在画布上加载所有图像时隐藏加载程序。目前,它并不等待在画布上加载图像。谢谢你的帮助 loader.show(); canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) { loader.hide(); }); 您需要使用Promise.all(),类似于: function loadImg(json){ return new Promise((resolve,reject)=&g

我想在画布上加载所有图像时隐藏加载程序。目前,它并不等待在画布上加载图像。谢谢你的帮助

loader.show();
canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {
   loader.hide();
});

您需要使用Promise.all(),类似于:

function loadImg(json){
   return new Promise((resolve,reject)=>{
      canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {
         resolve();
      })
   });
}
然后:

由于有些模棱两可,我无法给您一个明确的答案,但应该是沿着这条线。

从中可以看出,调用了第三个函数

在创建每个结构对象之后

因此,当加载第一个图像时,它将隐藏加载程序


您可以在
函数(o,object)
的主体内使用计数器,检查计数器是否达到了要显示的预期图像数量,然后隐藏加载程序。

该方法支持回调,您正在使用该回调与
canvas.renderAll.bind(canvas)
loader.show();
canvas.loadFromJSON(json, function() {
   canvas.renderAll();
   loader.hide();
});
不要调用该函数,而是调用您自己的函数来呈现和隐藏加载程序

loader.show();
canvas.loadFromJSON(json, function() {
   canvas.renderAll();
   loader.hide();
});

第三个函数仅用于在初始化后处理每个对象,每个对象调用一次。

…他应该在哪里检查计数器?他可以在执行
loader.show
时在作用域中定义计数器,并在
loadFromJSON
的第三个参数体中检查它。但是当我读到你的答案时,我觉得更好。嗯,大多数情况下都应该是这样,但我认为在非常罕见的情况下,它会给出错误的结果。谢谢,它正在工作,我根据你的建议修改函数。在loadfromjson进行自定义操作之前,我循环使用JSON。