diff --git a/nodes/core/logic/17-split.js b/nodes/core/logic/17-split.js index 666938e13..8563f07dd 100644 --- a/nodes/core/logic/17-split.js +++ b/nodes/core/logic/17-split.js @@ -266,7 +266,15 @@ module.exports = function(RED) { function apply_f(exp, accum, count) { exp.assign("N", count); exp.assign("A", accum); - return RED.util.evaluateJSONataExpression(exp, {}); + return new Promise((resolve,reject) => { + return RED.util.evaluateJSONataExpression(exp, {}, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); } function exp_or_undefined(exp) { @@ -296,9 +304,12 @@ module.exports = function(RED) { return msgs.reduce((promise, msg) => promise.then(accum => apply_r(reduce_exp, accum, msg, msg.parts.index, count)), Promise.resolve(accum)) .then(accum => { if(reduce_fixup !== undefined) { - accum = apply_f(reduce_fixup, accum, count); + return apply_f(reduce_fixup, accum, count).then(accum => { + node.send({payload: accum}); + }); + } else { + node.send({payload: accum}); } - node.send({payload: accum}); }); }).catch(err => { throw new Error(RED._("join.errors.invalid-expr",{error:e.message})); diff --git a/test/nodes/core/logic/17-split_spec.js b/test/nodes/core/logic/17-split_spec.js index d1902e620..9448e874c 100644 --- a/test/nodes/core/logic/17-split_spec.js +++ b/test/nodes/core/logic/17-split_spec.js @@ -1319,24 +1319,28 @@ describe('JOIN node', function() { initContext(function () { var n1 = helper.getNode("n1"); var n2 = helper.getNode("n2"); - n2.on("input", function(msg) { try { - msg.should.have.property("payload"); - msg.payload.should.equal(((((1+1*2)+2*2)+3*2)+4*2)*3); - done(); - } - catch(e) { done(e); } - }); - n1.context().flow.set(["one","two","three"],[1,2,3],"memory",function(err){ - if(err){ - done(err); - } else{ - n1.receive({payload:3, parts:{index:2, count:4, id:222}}); - n1.receive({payload:2, parts:{index:1, count:4, id:222}}); - n1.receive({payload:4, parts:{index:3, count:4, id:222}}); - n1.receive({payload:1, parts:{index:0, count:4, id:222}}); - } - }); + n2.on("input", function(msg) { + try { + msg.should.have.property("payload"); + msg.payload.should.equal(((((1+1*2)+2*2)+3*2)+4*2)*3); + done(); + } + catch(e) { done(e); } + }); + n1.context().flow.set(["one","two","three"],[1,2,3],"memory",function(err){ + if(err){ + done(err); + } else{ + n1.receive({payload:3, parts:{index:2, count:4, id:222}}); + n1.receive({payload:2, parts:{index:1, count:4, id:222}}); + n1.receive({payload:4, parts:{index:3, count:4, id:222}}); + n1.receive({payload:1, parts:{index:0, count:4, id:222}}); + } + }); + }catch(err) { + done(err); + } }); }); });