Throwing exception when a non-function callback is passed to elm.ports[port].subscribe
#952
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently calling
elm.ports[port].subscribe(undefined)
correctly addsundefined
to subscribers list. This will produce the following exception when subscribers get called:I think this behaviour should be changed because that exception message can be confusing, the stacktrace contains only Elm code, but most important the error could be raised before pushing the callback in subscribers list.
Following the same logic as
send
, that throws a runtime exception immediately when it receives invalid data, thesubscribe
with this PR will raise this error:Why I think
typeof callback !== 'function'
is safe:According to ECMAScript language specification the function call expression
currentSubs[i](value)
will throw an error if IsCallable is false, which returns true if its argument has the[[Call]]
internal method.typeof
will return "function" if an object implements [[Call]].If I'm not wrong, it's impossible that
typeof
doesn't return'function'
andcurrentSubs[i](value)
doesn't raise a TypeError, so if this is true I don't see any downside in throwing an error immediately!