JavaScript中的错误捕获无法正确捕获错误

JavaScript中的错误捕获无法正确捕获错误,javascript,error-handling,assets,p5.js,Javascript,Error Handling,Assets,P5.js,我正在用javascript开发一个利用p5.js库的游戏。我正在尝试加载自己的字体,其中我使用了一个.ttf文件,但有时p5.js无法正确加载字体。在这种情况下,我尝试使用try-and-catch方法来检查是否发生这种情况,如果发生这种情况,则将字体切换为始终有效的默认内置字体(不是.ttf,只是内置的)。以下是我关于该问题的代码: function preload() { try { font = loadFont("assets/BebasNeue-Regula

我正在用javascript开发一个利用p5.js库的游戏。我正在尝试加载自己的字体,其中我使用了一个.ttf文件,但有时p5.js无法正确加载字体。在这种情况下,我尝试使用try-and-catch方法来检查是否发生这种情况,如果发生这种情况,则将字体切换为始终有效的默认内置字体(不是.ttf,只是内置的)。以下是我关于该问题的代码:

function preload() {

  try {

    font = loadFont("assets/BebasNeue-Regular.ttf"); // Font from Google Fonts - https://fonts.google.com/specimen/Bebas+Neue#standard-styles

  } catch (error) {

    console.error("ERROR: " + error)
    console.log("Font was unable to load, using default font.");
    font = "Helvetica";

  }

  console.log("Assets preloaded...");

}
但是,每当我尝试运行代码时,我的画布不仅不会加载任何内容,而且错误仍然会出现在控制台中。但是,我的console.log语句不存在。它是这样说的:

Not allowed to load local resource: blob:null/a07d873c-2d5e-4653-92f4-02fd085cc6e4
p5.js:48337 
As the documentation states:

Outside of
preload()
, you may supply a callback function to handle the object:

You should refactor your code like this:

let font;

function preload() {
  loadFont("assets/BebasNeue-Regular.ttf", result => {
    console.log("Assets preloaded...");
    font = result;
  }, error => {
    console.error("ERROR: " + error)
    console.log("Font was unable to load, using default font.");
    font = "Helvetica";
  });
}

function setup() {
  // use the font
}
不允许加载本地资源:blob:null/a07d873c-2d5e-4653-92f4-02fd085cc6e4
p5.js:48337
作为缔约国:

preload()
之外,您可以提供一个回调函数来处理 对象:

您应该像这样重构代码:


查看错误消息,我的假设是,
loadFont
正在内部处理错误,而不是引发异常。尝试输入ttf字体的绝对路径,看看是否有效。只是猜测您的javascript文件可能是从与您想象中不同的目录运行的,因此相对路径已关闭。
loadFont
是一个承诺吗?我认为loadFont是一个承诺,但我不是100%确定(对不起,我对这个概念还是新手)。如果有帮助的话,这里是p5对该语句的解释:通过输入绝对路径,您的意思是从“C://Users…”开始吗?如果是这样,如果我在另一台设备上运行该程序,会不会有什么不同?
loadFont
接受另外两个参数,一个成功参数和一个错误参数回调。您需要使用第二个来捕获错误。它就在你提供的文档链接中。我试过了,错误仍然存在。这可能是loadFont()过程中的错误,还是我的代码中的错误?