当前位置: 首页 > 知识库问答 >
问题:

尝试捕捉并不总是在冰咖啡脚本中起作用

凌运恒
2023-03-14

我在< code >冰咖啡脚本中使用了< code>try catch块。我调用了不存在的对象< code>a的不存在的方法< code>fake,并期望捕获错误。

db = require '../../call/db.iced'
try
    await db.find "79", defer c, d
    a.fake()
catch error
    console.log "error catched"
    console.log error

但是在调用函数db.find a.fake()后,在控制台中抛出错误,但它没有按预期使用尝试捕获块。

如果我注释掉字符串<code>并等待数据库。查找“79”,将其延迟到c,d。。。

db = require '../../call/db.iced'
    try
        # await db.find "79", defer c, d ############## commented out
        a.fake()
    catch error
        console.log "error catched"
        console.log error

...它按预期工作,错误被捕获。

我试图通过其他简单的异步函数调用来改变字符串< code>await db.find "79 ",defer c,d,但是它们工作得很好,并且错误被很好地捕获。

有趣的是,函数db.find运行良好。当我注释掉stringa.fake()

db = require '../../call/db.iced'
    try
        await db.find "79", defer c, d
        #a.fake() ################################ commented out
    catch error
        console.log "error catched"
        console.log error

…此脚本工作时没有任何错误,因此不会捕获错误。

我不明白为什么在函数< code>await db.find "79 ",defer c,d之后我不能捕捉错误。

共有1个答案

巢权
2023-03-14

文档在<code>try-catch<code>语句中说明了以下内容:

唯一的异常是try,当从主循环的事件处理程序调用时,它不会捕获异常,原因与手动异步代码和try不能很好地协同工作。

我怀疑是因为<code>db。如果异步调用find,则<code>try线程,并且不停留在主线程中。这将导致您描述的结果。

一个粗略的解决方案是捕获两个函数调用。但是,我认为使用等待的正确方法是使用延迟功能。查看文档以获取说明。

此外,您可能会发现以下内容很有帮助:

  • 如何使用冰咖啡脚本正确处理错误?

可能的解决方案

>

  • 在两个语句周围放置一个尝试捕获。

    try
        await db.find "79", defer c, d
    catch error
        console.log "error catched"
        console.log error
    try
        a.fake()
    catch error
        console.log "error catched"
        console.log error
    

    如上面的链接所述,将db.find放在try catch之外,并以另一种方式检测它的错误。

    await db.find "79", defer err, id
    if err then return cb err, null
    
    try
        a.fake()
    catch error
        console.log "error catched"
        console.log error
    

  •  类似资料:
    • 如何使用和在中返回情侣值? 没有< code>autocb,我可以: 如何使用实现这一点?此代码... …抛出错误:

    • 当我刷新多个数据源时,我使用带有upshot js的Iced coffescript。刷新方法有两个回调,一个表示成功,另一个表示错误,我希望等待每个调用进行回调。 我看不出如何在不创建附加功能的情况下使用idced的咖啡脚本来执行此操作。我的问题是 - 有没有一种更优雅的方式,我可以服从多个回调之一? 这是我目前拥有的代码:

    • 我的sp中有一个try catch块,try中只有一个insert语句。捕捉检查错误代码,如果是pk违规,如果是则做更新。但是有时我会得到“当前事务不能被提交,不能支持写入日志文件的操作。回滚事务。 在批处理结束时检测到不可提交的事务。事务被回滚了“,所以我添加了xact_abort,但后来我不断得到”EXECUTE之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配“,我发现了这一

    • 问题内容: 尝试使用TowerJS作为测试设置基本站点,但是在运行脚手架生成器时遇到此错误。 问题答案: 更新您的package.json文件 在“ devDependencies”上并再次更新npm 为我解决了同样的问题

    • 我的项目由一个小图标组成,它在一个尺寸为25×20的网格上移动。我知道我可以用几个if/else块轻松地完成这项工作,但我想了解更多关于错误处理的知识。 我当时想的是使用try-catch,但它根本不会捕获数组索引越界异常或任何:它不会返回“error”或位置,因此它永远不会进入catch块。 我在想这样的伪代码: 实际代码:

    • 我目前正在尝试添加Espresso UI测试到我的Android应用程序,我希望能够通过它的提示字段目标TextInputEditText,然后点击它并输入一些文本。(我知道目标ID是更好的做法,但在本例中,我需要目标提示) 以下是我尝试这样做的方法: 但是,当尝试执行此操作时,我会得到以下错误: TextInputEditText{id=2131820762,res-name=input_dat