mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
[function] Make the function node top-level async
This allows you to use 'await' in a function node without having to wrap it in another promise/async function.
This commit is contained in:
parent
22e7ddcb1d
commit
7969dd431f
@ -96,7 +96,7 @@ module.exports = function(RED) {
|
|||||||
node.fin = n.finalize ? n.finalize : "";
|
node.fin = n.finalize ? n.finalize : "";
|
||||||
|
|
||||||
var handleNodeDoneCall = true;
|
var handleNodeDoneCall = true;
|
||||||
|
|
||||||
// Check to see if the Function appears to call `node.done()`. If so,
|
// Check to see if the Function appears to call `node.done()`. If so,
|
||||||
// we will assume it is well written and does actually call node.done().
|
// we will assume it is well written and does actually call node.done().
|
||||||
// Otherwise, we will call node.done() after the function returns regardless.
|
// Otherwise, we will call node.done() after the function returns regardless.
|
||||||
@ -105,7 +105,7 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var functionText = "var results = null;"+
|
var functionText = "var results = null;"+
|
||||||
"results = (function(msg,__send__,__done__){ "+
|
"results = (async function(msg,__send__,__done__){ "+
|
||||||
"var __msgid__ = msg._msgid;"+
|
"var __msgid__ = msg._msgid;"+
|
||||||
"var node = {"+
|
"var node = {"+
|
||||||
"id:__node__.id,"+
|
"id:__node__.id,"+
|
||||||
@ -284,14 +284,14 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function processMessage(msg, send, done) {
|
function processMessage(msg, send, done) {
|
||||||
try {
|
var start = process.hrtime();
|
||||||
var start = process.hrtime();
|
context.msg = msg;
|
||||||
context.msg = msg;
|
context.send = send;
|
||||||
context.send = send;
|
context.done = done;
|
||||||
context.done = done;
|
|
||||||
|
|
||||||
node.script.runInContext(context);
|
node.script.runInContext(context);
|
||||||
sendResults(node,send,msg._msgid,context.results,false);
|
context.results.then(function(results) {
|
||||||
|
sendResults(node,send,msg._msgid,results,false);
|
||||||
if (handleNodeDoneCall) {
|
if (handleNodeDoneCall) {
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
@ -302,7 +302,7 @@ module.exports = function(RED) {
|
|||||||
if (process.env.NODE_RED_FUNCTION_TIME) {
|
if (process.env.NODE_RED_FUNCTION_TIME) {
|
||||||
node.status({fill:"yellow",shape:"dot",text:""+converted});
|
node.status({fill:"yellow",shape:"dot",text:""+converted});
|
||||||
}
|
}
|
||||||
} catch(err) {
|
}).catch(err => {
|
||||||
if ((typeof err === "object") && err.hasOwnProperty("stack")) {
|
if ((typeof err === "object") && err.hasOwnProperty("stack")) {
|
||||||
//remove unwanted part
|
//remove unwanted part
|
||||||
var index = err.stack.search(/\n\s*at ContextifyScript.Script.runInContext/);
|
var index = err.stack.search(/\n\s*at ContextifyScript.Script.runInContext/);
|
||||||
@ -340,7 +340,7 @@ module.exports = function(RED) {
|
|||||||
else {
|
else {
|
||||||
done(JSON.stringify(err));
|
done(JSON.stringify(err));
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const RESOLVING = 0;
|
const RESOLVING = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user