diff --git a/packages/node_modules/@node-red/nodes/core/logic/17-split.js b/packages/node_modules/@node-red/nodes/core/logic/17-split.js index 09ebd921e..c644b9e36 100644 --- a/packages/node_modules/@node-red/nodes/core/logic/17-split.js +++ b/packages/node_modules/@node-red/nodes/core/logic/17-split.js @@ -572,6 +572,8 @@ module.exports = function(RED) { } } + if (msg.hasOwnProperty("reset")) { if (inflight[partId]) { delete inflight[partId] }; return; } + if ((payloadType === 'object') && (propertyKey === null || propertyKey === undefined || propertyKey === "")) { if (node.mode === "auto") { node.warn("Message missing 'msg.parts.key' property - cannot add to object"); @@ -590,7 +592,6 @@ module.exports = function(RED) { return; } - if (msg.hasOwnProperty("reset")) { if (inflight[partid]) { delete inflight[partId] } return; } if (!inflight.hasOwnProperty(partId)) { if (payloadType === 'object' || payloadType === 'merged') { inflight[partId] = { @@ -633,7 +634,7 @@ module.exports = function(RED) { } if (payloadType === 'object') { group.payload[propertyKey] = property; - group.currentCount = (group.currentCount || 0) + 1; + group.currentCount = Object.keys(group.payload).length; } else if (payloadType === 'merged') { if (Array.isArray(property) || typeof property !== 'object') { if (!msg.hasOwnProperty("complete")) { diff --git a/test/nodes/core/logic/17-split_spec.js b/test/nodes/core/logic/17-split_spec.js index 788172ebe..e55682965 100644 --- a/test/nodes/core/logic/17-split_spec.js +++ b/test/nodes/core/logic/17-split_spec.js @@ -677,6 +677,9 @@ describe('JOIN node', function() { n1.receive({payload:{f:1}, topic:"f", complete:true}); n1.receive({payload:{g:2}, topic:"g"}); n1.receive({payload:{h:1}, topic:"h"}); + n1.receive({reset:true}); + n1.receive({payload:{g:2}, topic:"g"}); + n1.receive({payload:{h:1}, topic:"h"}); n1.receive({payload:{i:3}, topic:"i"}); }); }); @@ -700,6 +703,9 @@ describe('JOIN node', function() { } catch(e) { done(e) } }); + n1.receive({payload:2, foo:"b"}); + n1.receive({payload:3, foo:"c"}); + n1.receive({reset:true}); n1.receive({payload:1, foo:"a"}); n1.receive({payload:2, foo:"b"}); n1.receive({payload:3, foo:"c"});