Нет, это невозможно. Знать, вызывает ли код определенную функцию (в данном случае resolve
), так же сложно, как проблему остановки . Существует доказательство того, что не существует алгоритма, который всегда может это определить.
Для иллюстрации предположим, что алгоритм определения того, вызывает ли функция resolve
, существует и доступен через функцию callsResolve(func)
. Поэтому callsResolve(func)
вернет true
, когда определит, что func
вызовет resolve
(без фактического запуска func
), и false
, когда определит, что func
будет не вызывать resolve
.
Теперь представьте себе это func
:
function func() {
if (!callsResolve(func)) resolve();
}
... теперь у нас есть парадокс: что бы ни возвращал этот вызов callsResolve
, это было неправильно. Так, например, если реализация callsResolve
будет имитировать выполнение func
(синхронно) и определит, что после предопределенного тайм-аута она должна вернуть false
, вышеприведенное является демонстрацией функция, которая вызывает resolve
сразу после истечения этого времени ожидания.