【问题标题】:How do you trace and visualize JavaScript Promises?你如何跟踪和可视化 JavaScript Promises?
【发布时间】:2013-04-01 15:25:40
【问题描述】:

在编写一个包含大量异步操作的相当大的 JavaScript 模块时,调试和遵循 Promise 的流程/状态变得相当困难。

是否有任何工具或框架用于检测测试或模块代码,以便为他提供我系统中所有 Promise 的流程?如果重要的话,我会使用 jQuery 承诺。

【问题讨论】:

  • +1 个很好的问题。我编写了自己的 Promise 库,其中所有 Promise 都存储在一个数组中,以便于循环和调试。我很想了解它在 jQuery 中是如何工作的。顺便说一句,问题已关闭,我投票决定重新打开它。
  • @Christophe 不要投票重新提出问题,因为您认为它可能有用。 StackOverflow 上没有任何有用的问题。询问“最佳工具/提示/技巧”的问题实际上是开放式的,如果问题没有一个正确答案,它们不属于 StackOverflow 之类的问答网站。
  • 这个问题虽然有用,但并不真正属于堆栈溢出。试试Software Engineering(要迁移的标志)
  • @Wouter 我理解你的意思,也许 OP 可以选择更好的措辞。正如我所说,我已经完成了一些关于 Promise 的工作,我认为这个问题非常面向代码和具体。我希望得到一个类似于“在 jQuery 中,promise 的状态存储在一个名为 $.xxx 的数组中”或“在 jQuery 中,函数 $.yyy 允许您遍历所有 Promise”的答案。
  • 有什么更好的改写建议吗?这很难,因为我正在寻找一个我不知道的框架。这里有一个鸡和蛋的问题,我不能更具体,因为我要问一些我找不到的东西。

标签: javascript jquery testing promise


【解决方案1】:

突然想到,@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()声明。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2022-12-10
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多