I am looking to implement Complete
node support for the Node-RED MCU Edition exploration. I've been able to understand many of the built-in nodes well enough to re-implement them, at least in part, for MCU.
I don't really understand the Complete
node. I'd like to, so I can try to implement it. The documentation explains:
Trigger a flow when another node completes its handling of a message.
That seems similar to catch
and status
nodes. But, I'm not sure how a node indicates it is complete. The documentation notes...
Not all nodes will trigger this event - it will depend on whether they have been implemented to support this feature
... but doesn't explain which nodes do trigger a complete. It mentions the "Email sending node" supports complete.
I guess have two questions:
- Do any of the core built-in Node-RED nodes support Complete? That would make it straightforward for me to explore the behavior directly by building some test flows.
- Other than digging into the full Node-RED sources (which is a big project!), what's the best way to learn how nodes implement support for Complete?
Thank you!
Generally best to give the full name for a node, a generic name like "complete" makes people have to search.
I believe the OP is referring to the built-in complete node.
I'd forgotten that one existed! Never actually needed to use it.
1 Like
@phoddie if a node uses the done
callback` then it supports the complete node.
See here: "JavaScript file : Node-RED" JavaScript file : Node-RED
@Steve-Mcl, that helps, thank you, And leads to some follow-on questions.
The document you refer to is clear. The done
callback passes to the event handler must be bound to the msg, so that when done()
is called, Node-RED knows which message is done / complete. I can emulate that behavior.
The Writing Functions document in the "Finishing with a message" section shows calling node.done()
. A function can have multiple messages pending from what I've seen (the Delay
node may receive several messages and wait to pass them along), so it doesn't seem that Node-RED can know which message is done when node.done()
is invoked which makes it impossible to trigger the Completion node with message that has the correct message id.
Perhaps it is a implicit requirement that nodes that have multiple messages in-flight use the done
callback provided by the event callback. But, can a Function
node use the event mechanism (the reference you provided appears to be for implementing nodes using Node.js)?