8

在编写一个相当大的 JavaScript 模块,其中包含大量的异步操作,所有这些操作都处理 Promise,调试和遵循 Promise 的流程/状态变得非常困难。

是否有任何工具或框架用于检测测试或模块代码,以让他了解我系统中所有 Promise 的流程?如果它很重要,我正在使用 jQuery 承诺。

4

2 回答 2

2

在我的脑海中,并受到@MrLeap 向 发送消息的想法的刺激,console通过您自己设计的“适配器”创建 Deferreds 怎么样。

例如(胚胎和未经测试):

var debugMode = true;

function DeferredAdapter(name) {
    var dfrd = $.Deferred();
    if(debugMode) {
        dfrd.notify = function() {
            console.log(name + ': notify');
            if (arguments[0] && typeof arguments[0] == "string")
                console.log(arguments[0]);
        };
        //similar for resolve
        //similar for reject
    }
    return dfrd;
}

这样(当你让它工作时),你可以在调试时做额外的事情,使用一种简单的机制来关闭生产代码中的额外内容,而无需执行所有代码清除console.log()语句。

于 2013-04-02T10:07:33.910 回答
1

这会增加相当多的开发开销,但如果您使用 node 作为后端,您可以使用vows.js实现非常强大的异步单元测试。如果您想为自己添加更多工作,如果您正在使用某种其他类型的服务器技术,您可以使用 vows 创建所有响应的模拟版本,并将其用于测试和报告。使用 node.js 模拟服务器还可以让您执行强大的企业^^ 操作,例如模拟某些请求而无法查看前端对其响应的优雅程度。

我希望我有一个比这更好的答案;console.log并且console.dir是你最好的朋友。把你的回调塞满它们,这样你就可以知道事情发生需要多长时间,以及它们发生的顺序。

于 2013-04-01T15:42:30.100 回答