如何在调试时从可观察对象中找到所有订阅函数

How to find all the subscriptions functions from an observable while debugging

我正在调试我的淘汰赛应用程序。在调试时我改变了一些可观察到的值,比如

data.myObservable(true);

数据传递到我的函数的位置。

此时,当我使用开发人员控制台中的范围分析变量时,我看到有 3 个订阅注册到该变量。

有什么方法可以找到这些订阅方法的位置。

由于它仅用于调试目的,您可以使用 private _subscriptions property on a subscribable

这是一个例子:

const myObs = ko.observable();

const cb1 = function(newVal) { };
const cb2 = function(newVal) { };
const cb3 = function(newVal) { };

myObs.subscribe(cb1);
myObs.subscribe(cb2);
myObs.subscribe(cb3);

myObs(10);

console.log(
  "There are",
  myObs.getSubscriptionsCount(),
  "subscribers to `myObs`:",
  myObs._subscriptions.change.map(
    ({ callback: { name }}) => name
  ).join(", ")

)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-debug.js"></script>

当然你也可以在设置observable的那一行打断点,然后用"step in to"完成函数调用。如果您在调试器中 "blackbox" knockout.js,它应该会直接将您带到第一个订阅的方法。