解决Dexie.js调试代码接管延期承诺的问题

时间:2016-11-15 12:22:02

标签: promise dexie

我使用Dexie.js处理索引存储。但是,它将接管延迟承诺启动的任何进程的异常处理。这使得很容易发现它们发生的错误。

2 个答案:

答案 0 :(得分:0)

这是有效的。如果这是一个好主意,我很乐意得到其他开发者的意见。

function isolate(deferred) {

    return {
        exec: function() {
            var args = arguments;
            var timeout = setTimeout(function() {
                    deferred.apply(this, args);
                    clearTimeout(timeout);
                },1);
        }
    };
}

function save(name, drawing, data, onComplete) {
    return db.drawings.put(
         { name: name, drawing, data: data 
    ).then(isolate(onComplete).exec);
}

这样Prom函数就完成了,Dexie.js非常高兴,然后在超时时启动一个新的,Dexie(或任何其他承诺风格的处理程序)不再关心。

答案 1 :(得分:0)

如果您需要调试代码并在发生错误时中断,您也可以在基于Promise的代码中执行此操作,而无需执行建议的解决方法。

在Chrome中的F12调试器中,选中“暂停捕获的例外”。还要确保blackbox第三部分库,这样你就不会破坏babel,jquery,dexie中的特征测试。这可以通过右键单击脚本代码上的某个位置(当调试器进入它时)并选择“blackbox”来完成。 (尽管不要将你自己的代码黑盒化!)

现在调试器会在代码中发生错误时中断,无论它是否从promise回调中启动。