- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用在 Ember.js 中分发的 RSVP 库,我正在尝试找出在 promise 中报告 fatal error 的正确模式——特别是我想通知一些几乎肯定是编程结果的事情由于 api 滥用而导致的错误,我想以大声的方式进行。一般来说,我是 promises 和 javascript 的新手,希望这个问题有意义
这是一个简单的例子(在 coffeescript 中):
doAsync = (arg, callback) ->
throw new Error('you gave me a way bad arg, I fail for you!')
promiseReturningApi = (data) ->
return new Ember.RSVP.Promise (resolve, reject) ->
callback = (err, resp) ->
if err then reject(err)
else resolve(resp)
doAsync(data, callback)
现在假设我已经识别出一个无法从中恢复的错误,该错误发生在 doAsync 内部——我想确保报告此错误,即使调用者忽略了附加错误处理程序,因为它几乎肯定只是导致调用者以不正确的方式调用了 api 函数
我想到了在拒绝处理程序中使用 setTimeout 的想法,以确保从某处 引发错误,即使调用者没有将错误处理程序附加到 promise
failLoud = (err) ->
if err.isProgrammerError
setTimeout () ->
throw err
throw err
promiseReturningApi = (data) ->
promise = new Ember.RSVP.Promise (resolve, reject) ->
callback = (err, resp) ->
if(err) then reject(err)
else resolve(resp)
doAsync(data, callback)
return promise.then(null, failLoud)
在从我的 promiseReturningApi 返回之前,将这样一个默认错误处理程序附加到一个 promise 是否被认为是一种合理的做法?这将允许我在调用者做一些不可能工作的事情时强制执行堆栈跟踪——即使堆栈跟踪会有点奇怪,但它可以使事情更容易开始……
即使我将示例 promise 返回函数称为“api”调用——我应该补充一点,我不是在编写框架代码——这完全是在一个应用程序中。如果 doAsync 是一个真实世界的函数,那么在我的真实世界版本中,它很可能来自一个对我来说是新的 api 的外部方——所以我很可能会滥用它我正在了解它......意思是我可能想要将模式制作成这样
failLoud = (err) ->
if err?.isProgrammerError
setTimeout () ->
throw err
throw err
promiseReturningApi = (data) ->
promise = new Ember.RSVP.Promise (resolve, reject) ->
callback = (err, resp) ->
if(err) reject(err)
resolve(resp)
try
doAsync(data, callback)
catch err
err.isProgrammerError = true
throw err
return promise.then(null, failLoud)
我认为这样做是在我的异步函数调用本身引发异常时强制从某处抛出异常——这样的异常几乎肯定会在参数中引发异步调用的验证阶段最常见的结果是我的应用程序代码传递了一些没有任何意义的东西——我想尽快找到它。这似乎是一种合理的模式,可以帮助调试在此上下文中应用程序代码中使用的 promise ?
最佳答案
新答案--
在这个与 ember 核心开发人员的视频小组讨论中,开发人员有一次分享了一个调试技巧:
http://www.youtube.com/watch?v=L9OOMygo1HI
Tom Dale 特别解决了 promises 中吞噬异常的问题,并建议使用新的 Ember.RSVP.onerror 功能来调试 promises 中的错误,否则这些错误将不会被报告,因为没有附加拒绝处理程序。
我认为这是对我的问题的正确答案——尽管我还不知道如何使用 RSVP.onerror 回调(或者 ember 在其中发布它的可用回调)...
关于javascript - 'LOUD' 错误的可接受 promise 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866672/
我希望使用 Python 计算一段音频的响度 - 可能通过提取一段音频的峰值音量,或者可能使用更准确的测量(RMS?)。 最好的方法是什么?我看过pyaudio ,但这似乎并没有达到我想要的效果。看起
我正在使用在 Ember.js 中分发的 RSVP 库,我正在尝试找出在 promise 中报告 fatal error 的正确模式——特别是我想通知一些几乎肯定是编程结果的事情由于 api 滥用而导
我正在尝试测量电视内容的各种剪辑(约 2-40 秒)的“响度”。我感兴趣的是内容的相对响度 - 人们在哪些场景中大喊大叫与窃窃私语、嘈杂的音乐与安静的场景等。 我认为这意味着我有兴趣捕捉增益(输入响度
我一直在寻找答案很长一段时间,但我得到的每一个解决方案对于我想做的事情来说似乎都太复杂了,或者可能没有“更简单”的方法...... 我想做的只是使用我的系统麦克风来获取房间内的音量或响度(或任何名称)
考虑以下 jQuery 代码: $('.child').closest('.parent').find('.sibling').hide(); 在每一步中,如果没有找到任何内容,jQuery 将默默失
默认情况下,辅助功能服务将为 EditText View 读出以下内容 如果 EditText 有输入的值 = 它会读出该值 如果没有输入值=它会读出“提示” 我希望它在两种情况下读出完全不同的内容。
我一直在尝试使用p5声音进行简单FFT,然后直观地绘制频谱带。 我注意到的一件事是,低频几乎在所有轨道中都显得很高,而高频似乎是静音的。 因此,例如,仅在16个频段上执行FFT时,大多数声音仅发生在前
我正在寻找一种强大的 key 加密算法,该算法具有附加功能,当加密文件被损坏或篡改时,它将“大声”失败;即它会失败并告诉我它,而不是产生垃圾作为解密的输出。 理想情况下,它是 Java 的标准。 AE
我有一个适用于三星平板电脑的 Android 应用程序,它使用从平板电脑耳机插孔获取电源的外部设备。当外部设备打开时(通过编程方式最大化音量),Android 会短暂地显示一个警告弹出窗口说:“如果你
我是一名优秀的程序员,十分优秀!