Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 带抛接球的飞镖中的错误处理。(Catch似乎没有执行)_Dart_Dartium - Fatal编程技术网

Dart 带抛接球的飞镖中的错误处理。(Catch似乎没有执行)

Dart 带抛接球的飞镖中的错误处理。(Catch似乎没有执行),dart,dartium,Dart,Dartium,我是第一次尝试Dart,但我无法让错误处理为我工作。这里有一些关于它的信息 资源: HTML、CSS和Dart的要点: 与项目紧密联系: CodePen上的JavaScript版本: 我想要什么: 如果图像源返回403错误代码,则创建MinecraftSkin实例应引发StateError。该异常应在generateHead()函数中处理,在该函数中尝试创建MineCraft skin实例 情况如何: 如果代表MineCraft玩家皮肤的图像不存在(当图像源不存在并返回403时),代码停止在

我是第一次尝试Dart,但我无法让错误处理为我工作。这里有一些关于它的信息

资源:

  • HTML、CSS和Dart的要点:
  • 与项目紧密联系:
  • CodePen上的JavaScript版本:
我想要什么:

如果图像源返回403错误代码,则创建MinecraftSkin实例应引发StateError。该异常应在generateHead()函数中处理,在该函数中尝试创建MineCraft skin实例

情况如何:

如果代表MineCraft玩家皮肤的图像不存在(当图像源不存在并返回403时),代码停止在第22行(onError;我抛出StateError),并打印到控制台“Breaking on exception:Bad state:User has no skin”

然而,在generateHead上的catch中,没有执行任何操作。当我提示它时,它不会打印StateError消息,也不会将StateError消息插入DOM中的选定元素

代码

导入'dart:html';
雷工类皮肤{
字符串用户;
CanvasElement ce=新的CanvasElement();
无效生成事件(事件e){
CanvasRenderingContext2D ctx=ce.getContext('2d');
ctx.imageSmoothingEnabled=假;
ctx.drawImageScaledFromSource((即目标作为ImageElement),8,8,8,0,0,ce.宽度,ce.高度);
}
CanvasImageSource getHead()=>ce;
字符串名称()=>用户;
MinecraftSkin(字符串minecraftUser,num size){
user=(minecraftUser==null)?“Notch”:minecraftUser;
ce.宽度=尺寸;
ce.高度=尺寸;
ImageElement img=新的ImageElement()
…onLoad.listen(_generateCavas)
…onError.listen(()=>抛出新状态错误('User has no skin');
img.src=”http://s3.amazonaws.com/MinecraftSkins/“+user+”.png”;
}
}
无效生成头(事件e){
MinecraftSkin ms;
试一试{
ms=新的MinecraftSkin((查询选择器(“#用户名”)作为InputElement)。值,128);
}关于状态错误捕获(se){
打印(se.信息);
querySelector(“#status”).text=se.message;
}
CanvasElement cems=ms.getHead();
cems.id=“mc”+女士姓名();
cems.title=“mc”+女士姓名();
文件.正文.附件(cems);
querySelector(“#status”).text=“Got head!”;
}
void main(){
querySelector(“#generateHead”).onClick.listen(generateHead);
}
提前谢谢


诚然,Jeremy的图像监听器(onLoad、onError)是异步的。MincraftSkin实例化在没有任何错误的情况下完成,并且只有在加载映像资源或接收到错误后,才会抛出StateError,可能是几百毫秒之后。构造器不会等待图像是否正确加载。

谢谢您的回答。但我该如何着手解决这个问题呢?在加载图像之前使用HttpRequest进行检查?或者我应该在MinecraftSkin类中的其他地方抛出StateError?如果这是我应该使用期货的情况,我不确定这里的最佳实践是什么,这就是为什么我在回答中没有提出任何替代方案。我认为,这里肯定需要未来,也许作为一个回报未来的工厂。使用额外的HttpRequest看起来并不好,因为响应时间增加,带宽浪费。好吧!我以前遇到过期货,但没有掌握它的窍门。我想是时候深入研究这篇关于未来和错误处理的文章了。如果有人能提供一个很好的例子!