想知道在创建异常消息时我应该花多少精力来强制使用有用的调试信息,或者我应该只是信任用户提供正确的信息,或者将信息收集推迟到异常处理程序?
我看到很多人都在做他们的例外,例如:
throw new RuntimeException('MyObject is not an array')
Run Code Online (Sandbox Code Playgroud)
或者使用自定义异常扩展默认异常但不会做太多但只更改异常名称:
throw new WrongTypeException('MyObject is not an array')
Run Code Online (Sandbox Code Playgroud)
但这并没有提供太多的调试信息......并且不会使用错误消息强制执行任何类型的格式化.所以你可能会得到完全相同的错误产生两个不同的错误消息...例如"数据库连接失败"vs"无法连接到数据库"
当然,如果它冒泡到顶部,它将打印堆栈跟踪,这是有用的,但它并不总是告诉我我需要知道的一切,通常我最终不得不开始拍摄var_dump()语句来发现出了什么问题,哪里......虽然这可能会被一个体面的异常处理程序所抵消.
我开始考虑类似下面的代码,我需要异常的thrower来提供必要的args来产生正确的错误消息.我想这可能就是这样的方式:
但我发现缺点是它们更难使用(需要你查找异常定义),因此可能会阻止其他程序员使用提供的异常......
我想对这个想法和一致,灵活的异常消息框架的最佳实践发表评论.
/**
* @package MyExceptions
* MyWrongTypeException occurs when an object or
* datastructure is of the incorrect datatype.
* Program defensively!
* @param $objectName string name of object, eg "\$myObject"
* @param $object object object of the wrong type
* @param $expect string expected type of object eg 'integer'
* @param $message any …Run Code Online (Sandbox Code Playgroud) 考虑一下这段代码
var crazy = function() {
console.log(this);
console.log(this.isCrazy); // wrong.
}
crazy.isCrazy = 'totally';
crazy();
// ouput =>
// DOMWindow
// undefined
Run Code Online (Sandbox Code Playgroud)
从内部疯狂()'this'指的是窗口,我想这是有道理的,因为通常你想要这个引用函数所附加的对象,但是我怎样才能让函数引用它自己,并访问一个属性设置自己?
回答:
不要使用arguments.callee,只需使用命名函数.
"注意:你应该避免使用arguments.callee(),只需给每个函数(表达式)一个名字." 通过关于arguments.callee的MDN文章
我正在使用git来跟踪我在Flash Builder中开发的项目,我想知道跟踪它的最佳方法,特别是关于Flash Builder生成的文件,编译器生成的文件和源文件.必须弹性文件.
我把它设置为通过.gitignore忽略所有flash builder .project和debugging目录:
.actionScriptProperties
.flexProperties
.metadata
.project
.settings
bin-debug
Run Code Online (Sandbox Code Playgroud)
并通过.gitattributes将任何swf/swc文件视为二进制文件
*.swf -crlf -diff -merge
*.swc -crlf -diff -merge
Run Code Online (Sandbox Code Playgroud)
此设置的一个问题是检出此项目并从头开始在Flash Builder中使用它:
当您有一个没有.project文件的项目文件夹时,Flash Builder不喜欢它.将源导入Flash Builder的唯一方法是:
创建一个新的Flex应用程序
使用git clone扼杀它创建的模板文件(特别是APP_NAME.mxml).
我在哪里放图书馆?从git的角度来看,我想将它们放在repo的lib文件夹中,所以当有人克隆repo时,一切正常,但从本地文件系统的角度来看,我想将所有库存储在一个位置并使用Flash Builder引用它们,因为我可能会更新库或下载更高版本.也许我应该把库放在他们自己的repo中并加载它们作为git模块?这样我就不需要手动记住在使用它们的所有X项目中更新我的Y库文件,编辑:它们只会在我更新每个项目的子模块时更新.
外部swfs/flex模块怎么样?我现在一直在bin-debug文件夹中粘贴外部swf文件,所以SWFLoader类可以找到它们,但是因为我是.gitignoring bin-debug文件夹,它们在克隆时没有附带repo.
最后一个问题是在哪里保留服务器的文件.我是否将它们放在一个单独的仓库中?我正在使用带有AMFPHP的php VO,因此能够在Flash Builder中编辑php文件以及我的actionscript文件...但它们不属于项目src文件夹.
我正在使用的当前解决方案是:
在项目根目录中创建"服务器"文件夹
指向一个apache虚拟主机
将运行/调试设置设置为http://APP_NAME.localhost
然后在文件导出时使用服务器文件夹替换bin-debug
这个问题是我的服务器文件夹中存在大量编译器生成的文件和非AS源文件.它似乎不是一个优雅的解决方案.
如何设置git以顺利使用Flash Builder?可以通过多个git repos/Flash Builder项目或ANT脚本或其他东西解决所有这些问题吗?
谢谢.
我想使用redux建模以下异步逻辑:
我不知道在哪里放这个逻辑.操作不了解其他操作,他们只能访问调度,因此他们无法停止并等待它们完成.减速器无法发送,所以我不能把它放在那里......所以它住在哪里?自定义中间件?store.listen?在智能组件?
我目前正在使用redux-promise-middleware和redux-thunk.如何最好地组织这种类型的流程 - 不需要买入像redux-saga或redux-rx等那样的东西?
还不确定透明地中断API调用以执行其他操作的最佳方法,即API调用不应在可选登录过程完成之后触发其已完成或失败的操作.
我应该建立一个'地理定位',ipv6,无线网状网络在谷歌android上运行.
我找到了支持网格划分的好应用程序:http: //www.open-mesh.net/wiki/batman-adv
"Batman-advanced是一种新的无线网络方法,它不再在IP基础上运行.与使用UDP数据包交换信息并设置路由表的BATMAN不同,batman-advanced仅在ISO/OSI第2层上运行并使用和路由(或者更好:网桥)以太网帧.它模拟所有节点参与的虚拟网络交换机.因此所有节点看起来都是链路本地的,因此所有更高的操作协议都不会受到网络内任何变化的影响.你几乎可以运行任何BATMAN Advanced以上的协议,突出的例子是:IPv4,IPv6,DHCP,IPX."
但我团队中的其他成员表示,这是不可行的,因为它在OSI上运行,而不是TCP/IP.这是我第一次听说OSI,我想知道这是多少问题?对可以在其上开发的网状网络应用程序有什么影响?考虑到android是相对较新的,我们不需要过多担心与现有应用程序的兼容性,所以它是否重要?
我没有花很多时间在网络上工作,所以请加入noobmans术语.
javascript ×2
apache-flex ×1
exception ×1
flexbuilder ×1
git ×1
networking ×1
osi ×1
php ×1
react-redux ×1
redux ×1
redux-thunk ×1
tcp ×1
wireless ×1