我曾经在我的 JS 类的任何方法中放置一个 try...catch:
var MyConstructor = function() {
this.init = function() {
try {
// the method code...
} catch(error) {
// the error manager log actions
}
};
// other methods, with the same try/catch usage
};
通过这种方式,保持代码接口(interface)相对简单,我认为代码中的任何错误都会被捕获并记录/管理。
var myInstance = new MyConstructor();
相反,每个脚本一个全局 catch block 是否足够? 关心抛出每个可能的(或值得注意的)错误,在我看来,知道应用程序中发生的每个错误就足够了:
// no try...catch inside the classes, but only a global try...catch per script:
try {
var myInstance = new MyConstructor();
} catch(error) {
/*
log in the needed environment
(e.g. client-side, via console, or to the server...)
*/
}
我在 Stackoverflow 上搜索并阅读了有关 JavaScript 错误管理的线程和重要的在线资源。
在这个阶段,我更感兴趣的是找到找到所有错误的最佳方法,而不是为了用户界面的优雅行为而管理它们。
这不是正确的方法吗?我愿意接受任何建议。
最佳答案
根据经验,您应该问自己“谁应该从逻辑上处理问题?”并坚持下去。
重要的是要记住,当您编写一段代码时,您实际上是在编写一个描述代码片段如何交互的契约。例如,在您创建 MyConstructor 实例的情况下,它为什么会失败?生成时做了什么promise?最重要的是,谁应该处理失败?
一些例子
假设我们有一个类 Car,Car 的实例有一个方法 drive(x)。
当您调用 drive(x) 时,Car 向右移动 x 位置。
操作 drive(x) 可能会失败,例如,如果 Car 已经在屏幕边缘,或者 Car 已经没有燃料。
我们刚刚将drive定义为“汽车向右移动x个位置”,这意味着汽车期望能够完成驱动 Action 并且无法完成complete 它在逻辑上是一个异常(exception)。在这种情况下,很明显处理异常的是 drive 的调用者而不是汽车本身,因为它不必知道它在什么环境中行驶。更妙的是,来电者不应试图将汽车开出边缘或在没有燃料的情况下以任何方式驾驶。
另一种情况
假设在同一个例子中,Environment 是一个包含汽车的类,它有一个 moveCars() 方法,可以根据某些规则移动环境中的所有汽车内含逻辑。 Environment 由期望它包含所有移动逻辑的程序使用。我们在 moveCars() 中使用了一些算法,该算法可以确保汽车不会发生碰撞。
我们可能有一些在我们的 moveCars() 方法中没有想到的边缘情况,或者由于某些假设不应该发生的情况,但是环境的用户希望它包含所有的移动逻辑,这意味着当异常发生时它应该自己处理。
那么,一般策略是什么?
您应该根据运行代码的组件的责任来处理异常。
关于javascript - JavaScript 错误捕获的正确粒度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317136/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参