在编写一个相当大的 JavaScript 模块,其中包含大量的异步操作,所有这些操作都处理 Promise,调试和遵循 Promise 的流程/状态变得非常困难。
是否有任何工具或框架用于检测测试或模块代码,以让他了解我系统中所有 Promise 的流程?如果它很重要,我正在使用 jQuery 承诺。
在编写一个相当大的 JavaScript 模块,其中包含大量的异步操作,所有这些操作都处理 Promise,调试和遵循 Promise 的流程/状态变得非常困难。
是否有任何工具或框架用于检测测试或模块代码,以让他了解我系统中所有 Promise 的流程?如果它很重要,我正在使用 jQuery 承诺。
在我的脑海中,并受到@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()
语句。
这会增加相当多的开发开销,但如果您使用 node 作为后端,您可以使用vows.js实现非常强大的异步单元测试。如果您想为自己添加更多工作,如果您正在使用某种其他类型的服务器技术,您可以使用 vows 创建所有响应的模拟版本,并将其用于测试和报告。使用 node.js 模拟服务器还可以让您执行强大的企业^^ 操作,例如模拟某些请求而无法查看前端对其响应的优雅程度。
我希望我有一个比这更好的答案;console.log
并且console.dir
是你最好的朋友。把你的回调塞满它们,这样你就可以知道事情发生需要多长时间,以及它们发生的顺序。