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