45 lines
2.6 KiB
Markdown
45 lines
2.6 KiB
Markdown
# [DEPRECATED] Undefined is not an object evaluating `register_handler_fx`
|
|
|
|
## Deprecation note
|
|
|
|
This type of error should not occur anymore now that we require the namespace in the `fx.cljs` file.
|
|
|
|
It can however happen with other macros requiring a cljs namespace.
|
|
|
|
The general fix for that type of issue is to have two files for the namespace where your macros are defined, let's say for `my-project.my-macro` namespace you would have:
|
|
- my_macro.cljs in which you need `(:require-macros my-project.my-macro)` and `(:require my-project.the-namespace-used-in-the-macro)`
|
|
- my_macro.clj in which you define the macro
|
|
|
|
That way you don't need to use any magical call like `find-ns` or inline `require` with some kind of call only once switch (which was the root cause of another bug in ``defstyle`` macro because the compilation phase at which the evaluation of the switch is done was not properly considered).
|
|
|
|
You also want to make sure users are using the macro by using a aliased namespace defined in require statement rather than require-macro and refer to the macro directly. Otherwise it won't require the cljs file and the require statement of the namespace in the macroexpension might not be there.
|
|
|
|
## Stacktrace
|
|
|
|
```
|
|
13:25:22, Requiring: hi-base32
|
|
13:25:23, Possible Unhandled Promise Rejection (id: 0):
|
|
TypeError: undefined is not an object (evaluating 'status_im.utils.handlers.register_handler_fx')
|
|
eval code
|
|
eval@[native code]
|
|
asyncImportScripts$@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:200728:21
|
|
tryCatch@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:26567:23
|
|
invoke@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:26742:32
|
|
tryCatch@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:26567:23
|
|
invoke@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:26643:30
|
|
http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:26653:21
|
|
tryCallOne@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:3725:16
|
|
http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:3826:27
|
|
_callTimer@http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false:28405:17
|
|
_callImmediatesPass@http://localhost:8081/index.bundle?pla<…>
|
|
```
|
|
|
|
## Cause
|
|
|
|
- stacktrace mentions `register_handler_fx`,
|
|
- common cause is when requires have been cleaned up and a require of `status-im.utils.handlers` namespace was removed because it looked like it was unused but was actually used through a fx/defn macro
|
|
|
|
## Solution
|
|
|
|
go through known faulty commit looking for deleted requires
|